雄辩的关系同步

时间:2018-01-11 12:56:27

标签: php mysql laravel eloquent laravel-eloquent

我在Laravel项目中与雄辩关系挣扎。

我有一个'用户'表和' user_lines'我的数据库中的表。 ' user_lines'表有一个' USER_ID'对应于' id' '用户'中的字段,在经典的主 - 细节关系中。

User模型与UserLine模型具有hasMany关系。 UserLine模型与User模型具有belongsTo关系。

在我的应用程序中,我有一个包含多个用户行的用户表单。在表单提交期间,可以添加,更改或删除这些用户行。到目前为止,我发现自己迭代提交的用户行并手动创建,更新和删除用户行。我觉得我错过了Eloquent提供的附加/分离/同步方法,但我似乎无法让它们发挥作用。

$user->lines()->attach or $user->lines()->sync               

给我一​​个例外,告诉我这些是Illuminate \ Database \ Query \ Builder上未定义的方法。

$user->lines()->createMany($lines) 

有效但只创建新行,它不会更新现有行并删除已删除的行。

2 个答案:

答案 0 :(得分:0)

attachdetachsync方法适用于多对多关系,而不适用于一对多关系。因此,您需要迭代线并逐个添加或编辑它们。

答案 1 :(得分:0)

您的表关系一对多,要附加到此类关系,您应该使用savesaveManycreate方法。

更新你可以做这样的事情:

$user->lines()->where('field',$something)->update($array);

attachdetachsync方法适用于多对多关系,而非一对多关系。