Как при выборке данных прописать условие для связанной таблице?

В Laravel, при работе с Eloquent, можно использовать методы с условиями для связанных таблиц. Для этого необходимо использовать метод whereHas(), который позволяет указать условие для связи.

Пример использования метода whereHas():

$posts = Post::whereHas('comments', function ($query) {
    $query->where('approved', true);
})->get();

В этом примере мы выбираем все посты, у которых есть комментарии, и где статус комментариев равен "approved" (утверждено).

В данном случае, Post - это модель, представляющая таблицу с постами, и у нее есть связь с моделью Comment, представляющей таблицу с комментариями. Связь между ними может быть определена с помощью метода comments() в модели Post.

Если вам нужно передать дополнительные условия для выборки данных связанных таблиц, вы можете продолжить использовать метод where():

$posts = Post::whereHas('comments', function ($query) {
    $query->where('approved', true)
          ->where('author', 'John Doe');
})->get();

В этом примере мы добавляем дополнительное условие, где выбираем только те комментарии, где автор комментария равен "John Doe".

Также, метод whereHas() можно использовать с другими методами, такими как orWhereHas(), whereDoesntHave() и orWhereDoesntHave(), чтобы задать более сложные запросы с условиями для связанных таблиц.

Пример использования метода orWhereHas():

$posts = Post::whereHas('comments', function ($query) {
    $query->where('approved', true);
})->orWhereHas('likes', function ($query) {
    $query->where('count', '>', 10);
})->get();

Этот пример выбирает все посты, у которых есть комментарии, где статус комментариев равен "approved", или у которых есть лайки, где количество лайков больше 10.

Также, можно использовать отношения с "точкой" для уточнения условий для связанных таблиц. Например, если у вас есть связь post->comments->user, вы можете использовать whereHas() с "точкой", чтобы добавить условие для модели User:

$posts = Post::whereHas('comments.user', function ($query) {
    $query->where('active', true);
})->get();

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

Конечно, метод whereHas() можно комбинировать с другими методами для создания более сложных запросов. У Laravel есть множество функциональных возможностей для работы с условиями для связанных таблиц, и это только краткое введение в эту тему. Вы можете изучить документацию Laravel, чтобы узнать больше о возможностях Eloquent.