Вывести посты, у которых есть комментарии

Когда настроены комментарии по связке «Один ко многим» (One to many), то можно показать посты, у которых есть комментарии, через метод has().

$posts = Post::has('comments')->get();

Также можно указать, что показывать статьи, у которых, например, больше 3 комментариев.

$posts = Post::has('comments', '>', 3)->get();

Может быть ситуация, что комментарий на модерации или скрыт. Не учитывать такие комментарии можно через метод whereHas().

use Illuminate\Database\Eloquent\Builder;

// …
$posts = Post::whereHas('comments', function (Builder $query) {
    $query->where('hidden', '!=', 1);
})->get();

И обратная ситуация, когда надо показать посты, у которых нет комментариев через метод doesntHave().

$posts = Post::doesntHave('comments')->get();