Вы можете использовать метод withCount
и выполнять подзапросы внутри:
$counts = Post::withCount([
'reviews',
'reviews as good_reviews' => function ($query) {
$query->where('type', 1);
}],
'reviews as bad_reviews' => function ($query) {
$query->where('type', 3);
}],
}])->get();
Вы можете получить доступ к счету, как это:
echo $counts[0]->good_reviews;
Для получения дополнительной информации: Документы