非静态方法 IlluminateDatabaseEloquentModel::update() 不应静态调用



我有一段这样的代码:

<div class="form-group row">
    <label for="image" class="col-form-label">Изображение</label>
    <input id="image" type="file" class="form-control{{ $errors->has('image') ? ' is-invalid' : '' }}" name="image" value="{{ old('image', $products->image) }}">
    @if($products->image)
       <img src="{{ Storage::url($products->image) }}" alt="" style="width: 150px">
    @endif
    @if ($errors->has('image'))
       <span class="invalid-feedback"><strong>{{ $errors->first('image') }}</strong></span>
    @endif
</div>

我收到以下错误:

非静态方法 Illuminate\Database\Eloquent\Model::update() 应该 不静态调用

我有控制器:

public function store(Request $request)
{
    $this->validate($request, [
        'name' => 'required|string|max:255',
        'image' => 'required|image|mimes:jpg,jpeg,png',
    ]);
    $file = request()->file('image') ? request()->file('image')->store('images', 'public') : null;
    $product = product::create([
        'name' => $request['name'],
        'description' => $request['description'],
        'image' => $file,
    ]);
    return redirect()->route('products.index', $product);
}

这是克鲁德

 public function update(Request $request, $id) 
 {
    $this->validate($request, [ 'key' => 'required|string|max:255', // 'value' => 'required', ]); 
    $product = product::update([ 'key' => $request['key'], 'name' => $request['name'], // 'value' => $request['value'], ]); 
    return redirect()->route('products.show', $product); 
 }

您可以使用查询生成器,如下所示...

DB::table('products')->where('id', $id)->update(['value' => $request->value"]);

或者,您可以使用雄辩,如下所示...

Product::where('id', $id)->update(['value' => $request->value"]);

您的代码应如下所示...

public function update(Request $request, $id) 
{
    $this->validate($request, [ 'key' => 'required|string|max:255', // 'value' => 'required', ]); 
    $product = product::where('id', $id)->update([ 'key' => $request['key'], 'name' => $request['name'], // 'value' => $request['value'], ]); 
    return redirect()->route('products.show', $product); 
}

更改行

$product = product::update([ 'key' => $request['key'], 'name' => $request['name'], // 'value' => $request['value'], ]); 

$product = (new product)->update([ 'key' => $request['key'], 'name' => $request['name'], // 'value' => $request['value'], ]); 

注意:始终建议遵循Laravel公约。所以产品而不是产品更适合模型名称。但是,请使用类名的确切大小写。您的模型文件未发布,但由于您的store方法工作正常,我相信您使用了product而不是Product

更改行:

  $product = product::update([ 'key' => $request['key'], 'name' => $request['name'], // 'value' => $request['value'], ]); 

将行更改为:此处"产品"将是表名

  DB::table('product')->update([ 'key' => $request['key'], 'name' => $request['name']]); 

我建议您更改更新数据的方法。为了使用Laravel更新您的数据或添加它将有所帮助的地方

转换这个:

product::update([ 'key' => $request['key'],'name' => $request['name']);

自:

product::where('id',$id)->update([ 'key' => $request['key'],'name' => $request['name']);

或:

product::find($id)->update([ 'key' => $request['key'],'name' => $request['name']);

你应该试试这个:

{
    $this->validate($request, [
        'name' => 'required|string|max:255',
        'image' => 'required|image|mimes:jpg,jpeg,png',
    ]);
    $file = request()->file('image') ? request()->file('image')->store('images', 'public') : null;
    $product = product::create([
        'name' => $request['name'],
        'description' => $request['description'],
        'image' => $file,
    ]);
    return redirect()->route('products.index');
}

我建议您更改更新数据的方法。为了使用 Laravel(实际上,不仅是 Laravel,而且通常使用所有编程语言和查询(如 MySQL))更新您的数据,您需要确定要更新的记录。在Laravel中,您可以使用find方法做到这一点。当然,您可以使用另一种方法,例如 WHERE .因此,为了回答您的问题,您不能像创建一样进行更新。因此,update方法代码应如下所示:

public function update(Request $request, $id)
{
    $this->validate($request, [
        'key' => 'required|string|max:255',
        // 'value' => 'required',
    ]);
    $product = Product::find($id); //get the object of product you want to update
    $product->key = $request['key'];
    $product->name = $request['name'];
    //$product->value = $request['value'];
    $product->save();
    return redirect()->route('products.show', $product);
}

我想你来自更新表单,请确保您的表单操作是动态的

<form action="{{ route ('products') }}/{{ $product->id }}" method="post">
@csrf 
@method('PATCH')

最新更新