Метод whereDoesntHave
Метод whereDoesntHave применяется к запросу Eloquent
и возвращает тот же запрос, дополненный условием, которое
проверяет отсутствие связанных моделей. Первым параметром
передаётся имя отношения, вторым - замыкание для дополнительной
фильтрации (необязательно). Метод позволяет отфильтровать записи,
которые не имеют связанных данных, удовлетворяющих определённым
критериям.
Синтаксис
<?php
Model::whereDoesntHave($relation, $callback);
?>
Пример
Давайте выберем все категории, у которых нет ни одной статьи:
<?php
use AppModelsCategory;
$categories = Category::whereDoesntHave('articles')->get();
foreach ($categories as $category) {
echo $category->name;
}
?>
Результат выполнения кода:
["category 1", "category 2", "category 3"]
Пример
Давайте выберем пользователей, у которых нет ни одного заказа
с суммой больше 1000:
<?php
use AppModelsUser;
$users = User::whereDoesntHave('orders', function ($query) {
$query->where('total', '>', 1000);
})->get();
foreach ($users as $user) {
echo $user->name;
}
?>
Результат выполнения кода:
["user 1", "user 3", "user 5"]
Пример
Давайте получим все статьи, у которых нет комментариев,
содержащих слово 'spam':
<?php
use AppModelsArticle;
$articles = Article::whereDoesntHave('comments', function ($query) {
$query->where('text', 'like', '%spam%');
})->get();
foreach ($articles as $article) {
echo $article->title;
}
?>
Результат выполнения кода:
["article 1", "article 2", "article 4"]
Смотрите также
-
метод
whereHas,
который фильтрует записи по наличию связанных данных -
метод
orWhereHas,
который добавляет условие через ИЛИ -
метод
whereRelation,
который проверяет свойства связанных моделей -
метод
get,
который выполняет запрос и возвращает коллекцию