В Laravel вы можете применять условия к отношениям, используя различные методы. Вот некоторые из методов, которые вы можете использовать:
whereHas: этот метод позволяет применять условия к отношениям, указывая функцию обратного вызова. Он фильтрует родительские модели на основе существования связанных моделей, соответствующих указанным условиям. Например:
$users = User::whereHas('posts', function ($query) {
$query->where('status', '=', 'published');
})->get();
orWhereHas: аналогичноwhereHas,orWhereHasприменяет условия к отношениям, но по принципу «или». Он извлекает родительские модели, у которых есть хотя бы одна связанная модель, соответствующая любому из указанных условий.
$users = User::orWhereHas('posts', function ($query) {
$query->where('status', '=', 'published')
->orWhere('status', '=', 'draft');
})->get();
has: методhasпозволяет получить родительские модели, имеющие хотя бы одну связанную модель. Он не позволяет указать дополнительные условия для связанных моделей.
$users = User::has('posts')->get();
whereDoesntHave: этот метод является противоположностьюwhereHasи позволяет получать родительские модели, у которых нет связанных моделей, соответствующих указанным условиям.
$users = User::whereDoesntHave('posts')->get();
whereHasMorph: этот метод используется при наличии полиморфной связи. Он позволяет применять условия к связанным моделям на основе типа и идентификатора морфа.
$comments = Comment::whereHasMorph('commentable', [Post::class], function ($query) {
$query->where('status', '=', 'published');
})->get();
Это всего лишь несколько примеров того, как можно применять условия к отношениям в Laravel. Не забудьте настроить вызовы методов в соответствии с именами и условиями ваших конкретных отношений.