Kou*_*sha 48 php relationship laravel eloquent laravel-4
是什么区别attach(),并sync()在Laravel 4雄辩的ORM?我试着环顾四周但找不到任何东西!
Ana*_*nam 102
连接():
例:
$user = User::find(1); $user->roles()->attach(1);
同步()
与attach()方法类似.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
Mah*_*alt 31
为了使它更简单:
该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;
Run Code Online (Sandbox Code Playgroud)
将返回文章:1, 2, 1
呼叫:
$user->articles()->syncWithoutDetaching([1]);
$user->articles()->syncWithoutDetaching([2]);
$user->articles()->syncWithoutDetaching([1]);
echo $user->articles;
Run Code Online (Sandbox Code Playgroud)
将返回文章:1, 2
呼叫:
$user->articles()->sync([1]);
$user->articles()->sync([2, 3]);
$user->articles()->sync([3, 4]);
echo $user->articles;
Run Code Online (Sandbox Code Playgroud)
将返回文章:3, 4