首页 文章

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

提问于
浏览
3

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

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

更新方法

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 回答

  • 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'),
    ]));
    
  • 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

  • 0

    使用像这样的Update方法

    $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'),
        ]);
    

相关问题