РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
196 of 1392 menu

Метод sync

Метод sync применяется к отношениям типа belongsToMany и позволяет синхронизировать связи в промежуточной таблице. Первым параметром передаётся массив идентификаторов связанных моделей, которые должны присутствовать в промежуточной таблице. Все связи, не перечисленные в массиве, будут удалены. Вторым параметром можно указать, следует ли отключать события моделей.

Метод возвращает массив с ключами 'attached', 'detached' и 'updated', содержащий идентификаторы связей, которые были добавлены, удалены или обновлены соответственно.

Синтаксис

<?php $model->relation()->sync($ids); $model->relation()->sync($ids, $detaching); ?>

Пример базового использования

Давайте синхронизируем роли пользователя, указав только нужные идентификаторы:

<?php use App\Models\User; use App\Models\Role; $user = User::find(1); $res = $user->roles()->sync([1, 3, 5]); var_dump($res); ?>

Результат выполнения кода:

[ "attached" => [1, 3, 5], "detached" => [], "updated" => [] ]

В этом примере все существующие связи пользователя будут удалены, а новые связи с ролями 1, 3 и 5 будут созданы.

Пример с массивом ключей

Давайте синхронизируем роли, передавая массив с дополнительными данными для промежуточной таблицы:

<?php use App\Models\User; use App\Models\Role; $user = User::find(2); $res = $user->roles()->sync([ 1 => ['expires_at' => '2025-12-31'], 3 => ['expires_at' => '2025-12-31'], 4 => ['expires_at' => '2025-12-31'] ]); var_dump($res); ?>

Результат выполнения кода:

[ "attached" => [1, 3, 4], "detached" => [], "updated" => [] ]

В этом примере создаются связи с дополнительными данными в колонке 'expires_at' промежуточной таблицы.

Пример с отключением детачмента

Давайте синхронизируем роли без удаления существующих связей, передав второй параметр false:

<?php use App\Models\User; use App\Models\Role; $user = User::find(3); $res = $user->roles()->sync([1, 2, 3], false); var_dump($res); ?>

Результат выполнения кода:

[ "attached" => [], "detached" => [], "updated" => [] ]

В этом примере существующие связи не удаляются, а только добавляются новые, если их ещё нет.

Пример с обновлением данных

Давайте синхронизируем роли, обновляя данные существующих связей:

<?php use App\Models\User; use App\Models\Role; $user = User::find(4); $res = $user->roles()->sync([ 1 => ['expires_at' => '2026-01-01'], 2 => ['expires_at' => '2026-01-01'] ]); var_dump($res); ?>

Результат выполнения кода:

[ "attached" => [], "detached" => [], "updated" => [1, 2] ]

В этом примере существующие связи с ролями 1 и 2 обновляются, устанавливая новое значение в колонке 'expires_at'.

Смотрите также

  • метод attach,
    который добавляет новые связи без удаления существующих
  • метод detach,
    который удаляет указанные связи из промежуточной таблицы
  • метод syncWithoutDetaching,
    который синхронизирует связи без удаления существующих
  • метод toggle,
    который переключает состояние связей (добавляет или удаляет)
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить