Метод 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,
который загружает связанные модели с условиями