Laravel 4 的 Eloquent ORM 中
attach()
和 sync()
有什么区别?我试着环顾四周,但什么也没找到!
附加():
示例:
$user = User::find(1);
$user->roles()->attach(1);
同步():
与
attach()
方法类似,sync()
方法用于附加相关模型。然而,主要区别是:
sync()
接受要放置在数据透视表上的 ID 数组示例:
用户角色
id 用户_id 角色_id 1 12 1 2 12 5 3 12 2
$user = User::find(12);
$user->roles()->sync(array(1, 2, 3));
以上操作将会删除:
id 用户_id 角色_id 2 12 5
并将
role_id 3
插入表格中。
用户角色表
id 用户_id 角色_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()->sync([1,2,3], true);
“True”将分离,“False”将附着。例如,如果您附加了角色 1,2,3,4 和 5,然后编辑并删除 5,则与“true”同步将删除 5,而与“false”同步将同步新的返回值,包括数据库中已有的 5 .