Laravel“类型错误:使用PUT / PATCH方法更新记录时

时间:2018-01-03 09:59:20

标签: php laravel

当我运行更新控制器它给我这个错误,我尝试从这个错误的同一平台不同的解决方案,但他们的修复是用这样的保存($ product)的分离语法更新。我正在使用Model Store进行身份验证并保存数据或编辑删除。

  

“类型错误:参数1传递给   Illuminate \ Database \ Eloquent \ Relations \ HasOneOrMany :: save()必须是   Illuminate \ Database \ Eloquent \ Model的实例,给定的数组,调用   C:\ xampp \ htdocs \ shopping \ app \ Http \ Controllers \ ProductController.php on   第138行◀“

更新方法

 public function update(Request $request, Product $Product){
      $store = Store::where('user_id', Auth::user()->id)->first();
      $updateProduct = $store->product()->save([
         'name'=> $request->input('name'),
         'description' => $request->input('description'),
         'normal_price' => $request->input('normal_price'),
         'sale_price' => $request->input('sale_price'),
         'category_id' => $request->input('category_id'),
     ]);
         return redirect('product')->with('status', 'Product Updated');
 }

查看编辑表单

 <form method="post" action="{{route('product.update', $product->id)}}">
                                {{ csrf_field() }}
                                {{ method_field('PUT') }}

3 个答案:

答案 0 :(得分:5)

当您使用save() Laravel expects model

使用create()方法。改变这个:

$updateProduct = $store->product()->save([

要:

$updateProduct = $store->product()->create([

或者这样做:

$updateProduct = $store->product()->save(new Product([
    'name'=> $request->input('name'),
    'description' => $request->input('description'),
    'normal_price' => $request->input('normal_price'),
    'sale_price' => $request->input('sale_price'),
    'category_id' => $request->input('category_id'),
]));

答案 1 :(得分:2)

正如我在控制器中提到的第一个我的表单类型PUT和UPDATE方法, 创建或另存为不是解决方案。

正确的答案和解决方案是用UPDATE替换save

$updateProduct = $store->product()->where('id', $Product->id)->update([
        'name'=> $request->input('name'),
        'description' => $request->input('description'),
        'normal_price' => $request->input('normal_price'),
        'sale_price' => $request->input('sale_price'),
        'category_id' => $request->input('category_id'),

    ]);

提醒:对于Update方法和PUT / PATCH或EDIT使用

     DB::table('users')
        ->where('id', 1)
        ->update(['votes' => 1]);

参考:Laravel Docs

答案 2 :(得分:0)

使用像这样的更新方法

$updateProduct = $store->product()->update([
        'name'=> $request->input('name'),
        'description' => $request->input('description'),
        'normal_price' => $request->input('normal_price'),
        'sale_price' => $request->input('sale_price'),
        'category_id' => $request->input('category_id'),
    ]);