Laravel Eloquent - Attach 与 SyncWithoutDetaching

Abd*_*hem 3 many-to-many relationship laravel eloquent

Laravel 中的 syncWithoutDetaching 和 attach 有什么区别?

pat*_*cus 6

两件事情:

  1. 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
Run Code Online (Sandbox Code Playgroud)
  1. attach()return null,而syncWithoutDetaching()返回一个数组,显示附加/分离/更新的内容。


mwa*_*afi 6

假设id您的数据透视表中有自增主键,您会注意到:

  1. attach() 将新记录添加到数据透视表,并且预先存在的关系将获得新的 ID。
  2. sync() 将删除所有存在的关系并设置仅在当前请求中提供,也带有新的 ID。
  3. syncWithoutDetaching() 将删除除当前进程中提供的所有现有关系,然后预先存在的行将不会获得新的 ID。