Laravel同步多个错误

时间:2017-06-19 07:07:48

标签: php laravel

我附加了user_id,product_id和一个额外的字段。在更新字段之前,每件事情都能正常工作。当字段将被填充第二次而不是更新时,将向数据库添加另一个字段。而且很明显因为我使用了attach而不是sync。但是当我使用同步时,我得到一个错误。

这是我的代码:

$price = $request->input('price');
$product = Product::find($id);
$product->users()->attach(Auth::id(), ['price'  => $price]);

这是我使用sync时遇到的错误:

  

参数1传递给   照亮\数据库\雄辩\关系\ BelongsToMany :: formatRecordsList()   必须是类型数组,给定整数

3 个答案:

答案 0 :(得分:5)

sync()方法的第一个参数应该是一个数组。所以正确的语法是:

$product->users()->sync([Auth::id() => ['price' => $price]]);

https://laravel.com/docs/5.4/eloquent-relationships#updating-many-to-many-relationships

答案 1 :(得分:2)

Sync方法接受要放置在数据透视表上的ID数组 如果数组中不存在模型并将新项插入数据透视表,sync方法也会从表中删除模型。

所以你需要做

$product->users()->sync([Auth::id() => ['price' => $price]]);

答案 2 :(得分:1)

sync方法接受一个I​​D数组放在中间表上。任何不在给定数组中的ID都将从中间表中删除。所以你应该将一个数组作为第一个参数传递给{{1}作为

sync()