我有一段这样的代码:
<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')