首页 文章

雄辩的关系同步

提问于
浏览
1

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

  • 0

    attachdetachsync 方法用于多对多关系,而不是一对多关系 . 因此,您需要遍历行并逐个添加或编辑它们 .

  • 0

    您的表关系是 one-to-many ,并且要附加到此类关系,您应该使用 savesaveManycreate 方法 .

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

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

    attachdetachsync 方法适用于多对多关系,而不适用于一对多关系 .

相关问题