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

Метод 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,
    который выполняет запрос и возвращает коллекцию
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить