Laravel Eloquent - 附加vs同步

时间:2014-05-31 09:25:16

标签: php laravel laravel-4 eloquent relationship

Laravel 4的Eloquent ORM中attach()sync()之间有什么区别?我试着环顾四周但找不到任何东西!

2 个答案:

答案 0 :(得分:89)

attach():

  • 处理多对多关系时插入相关模型
  • 无需数组参数

示例:

$user = User::find(1);

$user->roles()->attach(1);

同步()

attach()方法类似。 sync()也用于附加相关模型。但主要的区别是:

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

示例:

<强> USER_ROLE

id  user_id role_id
1    2       1
2    2       5
3    2       2
$user->roles()->sync(array(1, 2, 3));

以上操作将删除:

id  user_id role_id
2    2       5

role_id 3插入表格。

user_role表

id  user_id role_id
1    2       1
3    2       2
4    2       3

答案 1 :(得分:23)

使其更简单:

attach函数仅将记录添加到数据透视表。

sync函数用新记录替换当前记录。这对更新模型非常有用。

示例:

假设您有一个已创建的帖子,其中附有许多标签,其中标签ID为 [1,2,3]

用户可以更新帖子及其标签。

用户将向您发送新的标签ID [3,4,5]。

如果您使用sync功能,帖子的新标签将仅为 [3,4,5]

但如果您使用attach功能,帖子的新标签将为 [1,2,3,4,5]