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

Метод whereHas

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

Синтаксис

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

Пример

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

<?php use AppModelsCategory; $categories = Category::whereHas('articles')->get(); foreach ($categories as $category) { echo $category->name; } ?>

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

["technology", "science", "art"]

Пример

Давайте выберем категории, у которых есть статьи с количеством просмотров больше 100:

<?php use AppModelsCategory; $categories = Category::whereHas('articles', function ($query) { $query->where('views', '>', 100); })->get(); foreach ($categories as $category) { echo $category->name; } ?>

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

["technology", "science"]

Пример

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

<?php use AppModelsCategory; $date = '2025-01-01'; $categories = Category::whereHas('articles', function ($query) use ($date) { $query->whereDate('created_at', '>', $date); })->get(); foreach ($categories as $category) { echo $category->name; } ?>

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

["art", "science"]

Пример

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

<?php use AppModelsUser; $authors = User::whereHas('articles', function ($query) { $query->where('status', 'published'); })->get(); foreach ($authors as $author) { echo $author->name; } ?>

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

["John Doe", "Jane Smith"]

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

  • метод whereDoesntHave,
    который фильтрует записи без связанных моделей
  • метод orWhereHas,
    который добавляет условие через ИЛИ
  • метод has,
    который фильтрует по наличию связи без дополнительных условий
  • метод withWhereHas,
    который загружает связанные модели с условиями
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить