Laravel: применение условий к отношениям – методы и примеры

В Laravel вы можете применять условия к отношениям, используя различные методы. Вот некоторые из методов, которые вы можете использовать:

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

Это всего лишь несколько примеров того, как можно применять условия к отношениям в Laravel. Не забудьте настроить вызовы методов в соответствии с именами и условиями ваших конкретных отношений.