当我运行更新控制器它给我这个错误,我尝试从这个错误的同一平台不同的解决方案,但他们的修复是用这样的保存($ 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') }}
答案 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'),
]);