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

Метод syncWithoutDetaching

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

Синтаксис

<?php $model->relation()->syncWithoutDetaching($ids, $pivotData); ?>

Пример

Давайте добавим новые теги к статье, не удаляя существующие:

<?php namespace AppHttpControllers; use AppModelsArticle; use AppModelsTag; class ArticleController extends Controller { public function addTags() { $article = Article::find(1); $tagIds = Tag::whereIn('name', ['php', 'laravel'])->pluck('id')->toArray(); $res = $article->tags()->syncWithoutDetaching($tagIds); echo "Added tags count: " . count($res['attached']); } } ?>

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

"Added tags count: 2"

Пример

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

<?php namespace AppHttpControllers; use AppModelsArticle; use AppModelsTag; class ArticleController extends Controller { public function addTagsWithPivotData() { $article = Article::find(2); $tagIds = [1, 2, 3]; $pivotData = [ 1 => ['position' => 1], 2 => ['position' => 2], 3 => ['position' => 3] ]; $res = $article->tags()->syncWithoutDetaching($tagIds, $pivotData); echo "Added tags: " . implode(', ', $res['attached']); } } ?>

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

"Added tags: 1, 2, 3"

Пример

Давайте добавим только теги, которые ещё не связаны со статьёй:

<?php namespace AppHttpControllers; use AppModelsArticle; use AppModelsTag; class ArticleController extends Controller { public function addUniqueTags() { $article = Article::find(3); $existingTagIds = $article->tags()->pluck('tags.id')->toArray(); $allTagIds = Tag::pluck('id')->toArray(); $newTagIds = array_diff($allTagIds, $existingTagIds); if (count($newTagIds) > 0) { $res = $article->tags()->syncWithoutDetaching($newTagIds); echo "Added new tags: " . implode(', ', $res['attached']); } else { echo "No new tags to add"; } } } ?>

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

"Added new tags: 4, 5, 6"

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

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