WhereHas Laravel - основные методы и примеры использования
В Laravel метод `whereHas` используется для добавления условий на отношения в запросах Eloquent. Он позволяет фильтровать результаты запроса на основе связанных моделей.
Пример кода:
Предположим, у нас есть модель `User`, которая связана с моделью `Post` в отношении один-к-многим (один пользователь может иметь много постов). Мы хотели бы найти всех пользователей, которые имеют хотя бы один пост определенного типа.
php
$users = User::whereHas('posts', function ($query) {
$query->where('type', 'news');
})->get();
В этом примере мы вызываем метод `whereHas` на модели `User`, передавая ему имя отношения `posts` и анонимную функцию, содержащую условие поста типа "news". Это добавит условие в запрос, чтобы найти только тех пользователей, которые имеют хотя бы один пост с типом "news".
Мы также можем добавить дополнительные условия к запросу на основе связанных моделей:
php
$users = User::whereHas('posts', function ($query) {
$query->where('type', 'news')
->where('published', true);
})->get();
В этом примере мы добавляем еще одно условие `where` для проверки состояния публикации поста. Теперь запрос найдет только тех пользователей, у которых есть хотя бы один опубликованный пост типа "news".
Метод `whereHas` также может быть использован с цепочками других методов запроса, таких как `orderBy`, `limit` и т. д. Например:
php
$users = User::whereHas('posts', function ($query) {
$query->where('type', 'news');
})
->orderBy('name')
->with('posts')
->get();
В этом примере мы добавляем сортировку результатов по имени пользователей и жадную загрузку связанных моделей "posts".