Laravel Eloquent - 附加与 SyncWithoutDetaching
Posted
技术标签:
【中文标题】Laravel Eloquent - 附加与 SyncWithoutDetaching【英文标题】:Laravel Eloquent - Attach vs. SyncWithoutDetaching 【发布时间】:2020-09-18 02:22:47 【问题描述】:Laravel 中的 syncWithoutDetaching 和 attach 有什么区别?
【问题讨论】:
【参考方案1】:假设您的数据透视表中有自增主键id
,您会注意到:
attach()
会将新记录添加到数据透视表中,并且预先存在的关系将获得新的 id。
sync()
将删除所有存在的关系,并仅在当前请求中提供设置,并使用新的 id。
syncWithoutDetaching()
将删除除当前进程中提供的所有已存在的关系,那么预先存在的行将不会获得新的 id。
【讨论】:
【参考方案2】:两件事:
attach()
将始终向数据透视表添加新记录,而 syncWithoutDetaching()
只会在不存在新记录时添加新记录。
假设您有订单和商品。
$order->items()->attach(1);
$order->items()->attach(1);
// $order->items()->count() === 2
$order2->items()->syncWithoutDetaching(1);
$order2->items()->syncWithoutDetaching(1);
// $order2->items()->count() === 1
attach()
返回 null
,而 syncWithoutDetaching()
返回一个数组,显示附加/分离/更新的内容。
【讨论】:
以上是关于Laravel Eloquent - 附加与 SyncWithoutDetaching的主要内容,如果未能解决你的问题,请参考以下文章
将 for 循环的结果附加到 Laravel 中的 eloquent 输出
讨论:Laravel Eloquent vs DB 查询追加