【发布时间】:2014-07-21 00:42:04
【问题描述】:
Laravel 4 的 Eloquent ORM 中 attach() 和 sync() 有什么区别?我试图环顾四周,但找不到任何东西!
【问题讨论】:
标签: php laravel laravel-4 eloquent relationship
Laravel 4 的 Eloquent ORM 中 attach() 和 sync() 有什么区别?我试图环顾四周,但找不到任何东西!
【问题讨论】:
标签: php laravel laravel-4 eloquent relationship
attach():
例子:
$user = User::find(1);
$user->roles()->attach(1);
sync():
与attach()方法类似,sync()方法用于附加相关模型。但是,主要区别在于:
sync() 接受要放置在数据透视表上的 ID 数组例子:
用户角色
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【讨论】:
$user()->roles()->detach($oldIDs) 后跟$user()->roles()->attach($newIDs) 和$user()->roles()->sync($newIDs) 是一样的,对吧?
为了更简单:
attach 函数仅将记录添加到数据透视表中。
sync 函数将当前记录替换为新记录。这对于更新模型非常有用。
示例:
假设您创建了一个贴有许多标签的帖子,其中标签 ID 为 [1,2,3]。
并且用户可以更新帖子及其标签。
用户将向您发送新标签 ID 的 [3,4,5]。
如果您使用sync 函数,帖子的新标签将仅为[3,4,5]。
如果您使用attach 函数,帖子的新标签将为[1,2,3,4,5]。
【讨论】: