В чем разница между attach()
и sync()
в Laravel 4 Eloquent ORM? Я попытался оглянуться, но ничего не нашел!
Laravel Eloquent - Attach vs Sync
Ответ 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].