我有一段这样的代码:
sys.path.append(os.path.join(os.path.dirname(__file__)))
我遇到以下错误:
非静态方法Illuminate \ Database \ Eloquent \ Model :: 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>
这是CRUD
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);
}
答案 0 :(得分:0)
您应该尝试以下操作:
{
$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');
}
答案 1 :(得分:0)
我建议您更改更新数据的方法。为了使用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);
}
答案 2 :(得分:0)
更改行:
$product = product::update([ 'key' => $request['key'], 'name' => $request['name'], // 'value' => $request['value'], ]);
将行更改为:这里的“产品”将是表名
DB::table('product')->update([ 'key' => $request['key'], 'name' => $request['name']]);
答案 3 :(得分:0)
我假设您来自更新表单,请确保表单的操作是动态的
<form action="{{ route ('products') }}/{{ $product->id }}" method="post">
@csrf
@method('PATCH')
答案 4 :(得分:0)
我建议您改变更新数据的方法。为了使用 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']);
答案 5 :(得分:0)
换行
$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 约定。所以
Product 而不是 product 对于模型名称会更好。但是,请使用类名的确切大小写。您的模型文件未发布,但由于您的 store
方法运行良好,我相信您使用的是 product
而不是 Product
答案 6 :(得分:0)
您可以使用如下查询构建器...
DB::table('products')->where('id', $id)->update(['value' => $request->value"]);
或者,您可以使用 Eloquent 如下...
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);
}