Подтвердить что ты не робот

Laravel Eloquent - Attach vs Sync

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

4b9b3361

Ответ 1

присоединять():

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

Пример:

$user = User::find(1);

$user->roles()->attach(1);

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

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

  • Метод 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

Ответ 2

Сделать это еще проще:

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

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

Пример:

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

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

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

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

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