Laravel Eloquent - Attach vs Sync

2022-08-30 08:00:41

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


答案 1

附加():

  • 使用多对多关系时插入相关模型
  • 不需要数组参数

例:

$user = User::find(1);
$user->roles()->attach(1);

sync():

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

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

例:

user_role

id  user_id role_id
1    12       1
2    12       5
3    12       2
$user = User::find(12);
$user->roles()->sync(array(1, 2, 3));

上述操作将删除:

id  user_id role_id
2    12       5

并插入到桌子上。role_id 3

user_role表

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


答案 2

为了使其更加简单:

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

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

例:

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

用户能够更新帖子及其标签。

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

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

如果您使用该函数,帖子的新标签将为[1,2,3,4,5]attach


推荐