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

Метод whereDoesntHaveMorph

Метод whereDoesntHaveMorph применяется к запросу Eloquent и позволяет отфильтровать записи, у которых отсутствует полиморфная связь с указанными типами моделей. Первым параметром передаётся имя отношения, вторым - массив типов моделей для проверки, третьим - замыкание для дополнительной фильтрации.

Синтаксис

<?php Model::whereDoesntHaveMorph($relation, $types, $callback); ?>

Пример

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

<?php use AppModelsComment; use AppModelsArticle; use AppModelsVideo; $comments = Comment::whereDoesntHaveMorph('commentable', [Article::class, Video::class])->get(); foreach ($comments as $comment) { echo $comment->text; } ?>

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

"comment 1" "comment 3" "comment 5"

Пример

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

<?php use AppModelsComment; use AppModelsArticle; $comments = Comment::whereDoesntHaveMorph('commentable', [Article::class])->get(); foreach ($comments as $comment) { echo $comment->text; } ?>

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

"comment 2" "comment 4" "comment 6"

Пример

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

<?php use AppModelsComment; use AppModelsArticle; use AppModelsVideo; $comments = Comment::whereDoesntHaveMorph('commentable', [Article::class, Video::class], function ($query) { $query->where('status', 'active'); })->get(); foreach ($comments as $comment) { echo $comment->text; } ?>

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

"comment 1" "comment 2"

Пример

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

<?php use AppModelsComment; use AppModelsArticle; use AppModelsVideo; $comments = Comment::whereDoesntHaveMorph('commentable', [Article::class, Video::class], function ($query) { $query->where('created_at', '>', now()->subDays(30)) ->where('active', true); })->get(); foreach ($comments as $comment) { echo $comment->text; } ?>

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

"comment 1" "comment 2" "comment 3"

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

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