Laravel 4 的 Eloquent ORM 中的 attach()
和 sync()
有什么区别?我试图环顾四周,但找不到任何东西!
附():
处理多对多关系时插入相关模型
不需要数组参数
例子:
$user = User::find(1);
$user->roles()->attach(1);
同步():
与 attach()
方法类似,sync()
方法用于附加相关模型。但是,主要区别在于:
sync() 接受要放置在数据透视表上的 ID 数组
其次,最重要的是,如果模型不存在于数组中,sync 方法将删除数据透视表中的数据,并且仅将新项目插入到数据透视表中。
例子:
用户角色
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
插入表中。
用户角色表
id user_id role_id 1 12 1 3 12 2 4 12 3
为了使它更简单:
attach
函数仅将记录添加到数据透视表。
sync
函数将当前记录替换为新记录。这对于更新模型非常有用。
例子:
假设您有一个创建的帖子,上面附加了许多标签,其中标签 ID 为 [1,2,3]。
并且用户可以更新帖子及其标签。
用户将向您发送新标签 ID 的 [3,4,5]。
如果您使用 sync
函数,帖子的新标签将仅为 [3,4,5]。
如果您使用 attach
函数,帖子的新标签将为 [1,2,3,4,5]。
发布的答案没有提到syncWithoutDetaching
,所以这是我的简单看法。
如果你想:
将模型添加到关系中,允许重复,使用 attach()
将模型添加到关系中,忽略重复,使用 syncWithoutDetaching()
设置与确切模型的关系,使用 sync()
例子:
来电:
$user->articles()->attach(1);
$user->articles()->attach(2);
$user->articles()->attach(1);
echo $user->articles;
将返回文章:1, 2, 1
来电:
$user->articles()->syncWithoutDetaching([1]);
$user->articles()->syncWithoutDetaching([2]);
$user->articles()->syncWithoutDetaching([1]);
echo $user->articles;
将返回文章:1, 2
来电:
$user->articles()->sync([1]);
$user->articles()->sync([2, 3]);
$user->articles()->sync([3, 4]);
echo $user->articles;
将返回文章:3, 4
不定期副业成功案例分享
$user()->roles()->detach($oldIDs)
后跟$user()->roles()->attach($newIDs)
与$user()->roles()->sync($newIDs)
相同,对吧?