Следующее может работать, потому что вы группируете по первичному ключу таблицы posts
. Счетчик агрегации должен быть в первичном ключе DISTINCT, чтобы избежать его многократного подсчета из-за других объединений badges
и blog_cat
.
$posts = DB::table('posts')
->limit(5)
->join('badges', 'posts.badge', '=', 'badges.id')
->join('blog_cat', 'posts.maincat', '=', 'blog_cat.id')
->join('comments_blogs', 'posts.id', '=', 'comments_blogs.blog_id', 'left outer')
->select('posts.*', 'badges.css' , 'badges.desc',DB::raw("count(distinct comments_blogs.id) as count"))
->groupBy('posts.id')
->get();
Сам по себе второй можно упростить до :
$posts = DB::table('comments_blogs')
->select('blog_id as id', DB::raw("count(*) as count"))
->groupBy('blog_id')
->get();