Php 不应静态调用非静态方法Illumb\Database\Eloquent\Model::update()
我有一段代码如下:Php 不应静态调用非静态方法Illumb\Database\Eloquent\Model::update(),php,laravel,crud,Php,Laravel,Crud,我有一段代码如下: <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
<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>
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);
}
是积垢
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);
}
你应该试试这个:
{
$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
。所以,为了回答您的问题,您不能像创建这样进行更新。因此,您的更新
方法代码应该如下所示:
<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>
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);
}
换行:
$product = product::update([ 'key' => $request['key'], 'name' => $request['name'], // 'value' => $request['value'], ]);
将行更改为:此处的“产品”将是表名
DB::table('product')->update([ 'key' => $request['key'], 'name' => $request['name']]);
如果您来自更新表单,请确保表单的动作是动态的
<form action="{{ route ('products') }}/{{ $product->id }}" method="post">
@csrf
@method('PATCH')
@csrf
@方法('补丁')
我建议您改变更新数据的方法。为了用Laravel更新您的数据,或在有帮助的地方添加数据
将其转换为:
product::update([ 'key' => $request['key'],'name' => $request['name']);
致:
或:
换乘线路
$product = product::update([ 'key' => $request['key'], 'name' => $request['name'], // 'value' => $request['value'], ]);
到
注:始终建议遵循拉雷维尔公约。所以
型号名称最好使用产品而不是产品。但是,请使用类名的大小写。您的模型文件未发布,但由于您的存储
方法运行良好,我相信您使用了产品
而不是产品
你的
产品
型号真的是小写吗?也许$product=product::create([
应该是$product=product::create([
?您的更新声明在哪里?嘿@Alisher您的问题在于您的更新代码您已经向我们显示了您的商店代码,请显示您的更新代码,并请再次检查您的产品类名是否为“product”或“product”。我们需要查看您的更新方法。因为在商店方法中没有更新command已执行。@n1njac0de公共函数更新(请求$Request,$id){$this->validate($Request,['key'=>'必需的|字符串| max:255',//'value'=>'必需的',]);$product=product::update(['key'=>$Request['key'],'name'=>$Request['name'],//'value'=>$request['value'],];return redirect()->route('products.show',$product);}我得到了以下错误:非静态方法illumb\Database\elount\Model::update()不应被静态调用QLSTATE[42S22]:未找到列:1054“字段列表”中的未知列“键”(SQL:updateproducts
setname
=WWWWXXX,update\u at
=2018-12-28 09:52:14,key
=test whereid
=2)SQLSTATE[42S22]:未找到列:“字段列表”中的1054未知列“键”(SQL:update products set name=WWXXX,update_at=2018-12-28 09:52:14,key=test,其中id=2)–这是另一个错误tho。您的键列不存在,或者您的可填充数组不包含key
value。我还鼓励您发布产品迁移和模型的代码片段。那么,它是如何工作的呢?如果已经工作了,请接受我的回答
$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'], ]);