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:update
products
set
name
=WWWWXXX,
update\u at
=2018-12-28 09:52:14,
key
=test where
id
=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'], ]);