Laravel Eloquent – Attach vs Sync

В чем разница между attach() и sync() в Eloquent ORM от Laravel 4? Я пытался осмотреться, но ничего не мог найти!

прикреплять():

  • Вставляйте связанные модели при работе со многими отношениями ко многим
  • Параметр массива не ожидается

Пример:

 $ user = Пользователь :: find (1);

 $ User-> роли () -> присоединять (1);

синхронизации ()

Аналогично методу attach() . sync() также используется для присоединения связанных моделей. Однако основное различие заключается в следующем:

  • Метод Sync принимает массив идентификаторов для размещения на сводной таблице
  • Во-вторых, самое главное , метод sync удалит модели из таблицы, если модель не существует в массиве и вставляет новые элементы в сводную таблицу.

Пример:

USER_ROLE

 id user_id role_id
 1 2 1
 2 2 5
 3 2 2
 $ user-> role () -> sync (array (1, 2, 3));

Вышеуказанная операция удалит:

 id user_id role_id
 2 2 5

И вставьте role_id 3 в таблицу.

таблица user_role

 id user_id role_id
 1 2 1
 3 2 2
 4 2 3

Чтобы сделать его еще проще:

Функция attach только добавляет записи в таблицу Pivot.

Функция sync заменяет текущие записи новыми записями. Это очень полезно для обновления модели.

Пример:

Предполагая, что у вас есть созданная почта, на которой есть много тегов, где ID тегов [1,2,3] .

И пользователь имеет возможность обновлять сообщение и его теги.

Пользователь отправит вам новый идентификатор тегов [3,4,5].

Если вы используете функцию sync , новые теги сообщения будут [3,4,5] .

Но если вы используете функцию attach , новые теги сообщения будут [1,2,3,4,5] .