如何 select 指定 id 并在 Laravel 中更新?

How to select specfic id and update in Laravel?

我正在研究 Laravel CRUD。 Laravel 框架是 6.18.15 我要select的一个记录和更新。

这是照片库。 现在,如果我单击其中一张照片,我可以看到下面的 URL

https://mywebsite.net/public/edit?id=59

但是在 edit.blade.php 我得到了这个错误

Undefined variable: id

有人可以教我正确的代码吗?

这些是当前代码

Controller UPDATED

public function edit(Request $request)
{
  
    $images = ImageGallery::find($id);
    return view('edit',compact('images'));
}

public function editpcs(Request $request)
{
    $this->validate($request, [
        'title' => 'required',
        'image' => 'required|mimes:jpeg,jpg' 
    ]);

    $input['image'] = time().'.'.$request->image->getClientOriginalExtension();

 if($request->hasFile('image')) {

  $image       = $request->file('image');
  $filename    = time().'.'.$request->image->getClientOriginalExtension();
  $image_resize = Image::make($image->getRealPath());              
  $image_resize->resize(1280, null, function ($image) {$image->aspectRatio();});

  $image_resize->save(public_path('images/ServiceImages/' .$filename));
  }
  $request->image->move(public_path('images'), $input['image']);
    $input['title'] = $request->title;
   
   // ImageGallery::update($input);

    $update = DB::table('image_gallery')->where('id', $id)->update( [ 'title' => $request->title, 'image' => $request->image]); 


    return view('edit',compact('images'))->with('sucess','sucessfully updated');

}

web.php

//edit view
Route::get('edit', 'ImageGalleryController@edit');
Route::post('edit', 'ImageGalleryController@edit');

//edit procces
Route::get('editpcs', 'ImageGalleryController@editpcs');
Route::post('editpcs', 'ImageGalleryController@editpcs');

更新

@if($images->count())
   @foreach($images as $image)   
      <div class='text-center'>
        <small class='text-muted'>{{$image['id']}}/ {{$image['title']}} </small>
      </div>       
   @endforeach
@endif

MODEL

namespace App;
use Illuminate\Database\Eloquent\Model;
class ImageGallery extends Model
{
    protected $table = 'image_gallery';
    protected $fillable = ['title', 'image'];
}

我觉得像这个函数:

public function edit(Request $request)
{
    $images = ImageGallery::find($id);
    return view('edit',compact('images'));
}

应该是这样的吧?

public function edit(Request $request)
{
    $id = $request->input('id', null);
    $images = ImageGallery::find($id);
    return view('edit',compact('images'));
}

实际上,$id 在您尝试将其传递给 find() 方法之前似乎未定义。但是根据您的 URL 它在 $request 对象中。所以你需要从那里得到它并进入功能。您可以在 the docs.

中阅读有关此方法的信息

其实$id在这里真的是undefined,应该是$request->route('id') or request('id') or $_GET['id'] or $request->input('id')

public function edit(Request $request)
{
    $id = request('id');
    $images = ImageGallery::findOrFail($id); // use findOrFail() id not exist in table, it throw a 404 error
    return view('edit',compact('images'));
}

看看 $_GET and $_REQUEST 超全局变量。以下内容适用于您的示例:

$id = $_GET['id'];
$country = $_GET['country'];

在laravel中你可以使用Input::get(),但是Input::get在较新版本的laravel中被弃用了,更喜欢$request->input而不是Input::get

$id= $request->input('id');
$country= $request->input('country');
public function edit(Request $request)
{
    $id = request('id');
    $images = ImageGallery::where('id',$id)->first();

    return view('edit',compact('images'));
}