Метод 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,
который выполняет запрос и возвращает коллекцию