Skip to main content

Laravel whereHas / has. Выбираем только модели со связями

Очень часто возникает ситуация, когда нужно выбрать только те модели у которых есть связь. Например посмотреть сколько пользователей оставили комментарий, статьи с комментариями, вывести список пользователей у которых есть корзина с товарами и так далее. Для этого разработчики фреймворка подготовили нам несколько полезных методов — has, whereHas.

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

Post::has('comments')->get();
//
User::has('carts')->get();

Метод has принимает так называемый вложенный синтаксис. Например выберем пользователей с корзинами у которых есть товар:

User::has('carts.products')->get();

Или посты с комментариями у которых есть лайки:

Post::has('comments.likes')->get();

Также есть более продвинутый вариант — whereHas / orWhereHas. Этот метод позволяет задать условие для выборки.

Post::whereHas('comments', function (Builder $query) {
    $query->where('content', 'like', 'текст%');
})->get();

// or
App\Post::whereHas('comments', function (Builder $query) {
    $query->where('approved', 1);
})->get();

Источник — https://laravel.com/docs/5.8/eloquent-relationships#querying-relationship-existence

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *