我在Laravel项目中与Eloquent关系挣扎 .
我的数据库中有一个'user'表和'user_lines'表 . 'user_lines'表有一个'user_id'字段,对应于'users'中的'id'字段,采用经典的主 - 细节关系 .
User模型与UserLine模型具有hasMany关系 . UserLine模型与User模型具有belongsTo关系 .
在我的应用程序中,我有一个包含多个用户行的用户表单 . 在表单提交期间,可以添加,更改或删除这些用户行 . 到目前为止,我发现自己迭代提交的用户行并手动创建,更新和删除用户行 . 我觉得我错过了Eloquent提供的附加/分离/同步方法,但我似乎无法让它们工作 .
$user->lines()->attach or $user->lines()->sync
给我一个例外,告诉我这些是Illuminate \ Database \ Query \ Builder中未定义的方法 .
$user->lines()->createMany($lines)
虽然工作但只创建新行,但它不会更新现有行并删除已删除的行 .
2 回答
attach
,detach
和sync
方法用于多对多关系,而不是一对多关系 . 因此,您需要遍历行并逐个添加或编辑它们 .您的表关系是 one-to-many ,并且要附加到此类关系,您应该使用
save
,saveMany
或create
方法 .为了更新你可以做这样的事情:
attach
,detach
和sync
方法适用于多对多关系,而不适用于一对多关系 .