// ПОВІЛЬНО: Підзапит для кожного користувача
$users = User::whereHas('posts', function ($query) {
$query->where('published', true);
})->get();
// ШВИДКО: Одна join операція
$users = User::whereRelation('posts', 'published', true)
->get();
// Декілька умов
$users = User::whereRelation('posts', 'published', true)
->whereRelation('posts', 'views', '>', 1000)
->get();
// Різні зв'язки
$users = User::whereRelation('posts', 'published', true)
->whereRelation('profile', 'verified', true)
->get();
// Коли ПОТРІБЕН whereHas() - складна логіка
$users = User::whereHas('posts', function ($query) {
$query->where('published', true)
->where(function ($q) {
$q->where('views', '>', 1000)
->orWhere('featured', true);
});
})->get();
// Підрахунок зв'язків
$users = User::whereHas('posts', fn($q) =>
$q->where('published', true), '>=', 5
)->get();
// orWhereRelation() також доступний
$users = User::whereRelation('posts', 'status', 'draft')
->orWhereRelation('posts', 'status', 'pending')
->get();