Mysql 带计数的Laravel多重联接

Mysql 带计数的Laravel多重联接,mysql,laravel,eloquent,Mysql,Laravel,Eloquent,我尝试用一个计数连接多个表,如果我拆分它,我可以让它工作,但是没有一种方法可以在一个状态下完成,或者我必须用另一种方式完成吗 $posts=DB::table('posts')) ->限制(5) ->加入('badges','posts.badge','=','badges.id')) ->加入('blog_cat','posts.maincat','=','blog_cat.id')) ->选择('posts.*'、'badges.css'、'badges.desc') ->get(); $p

我尝试用一个计数连接多个表,如果我拆分它,我可以让它工作,但是没有一种方法可以在一个状态下完成,或者我必须用另一种方式完成吗

$posts=DB::table('posts'))
->限制(5)
->加入('badges','posts.badge','=','badges.id'))
->加入('blog_cat','posts.maincat','=','blog_cat.id'))
->选择('posts.*'、'badges.css'、'badges.desc')
->get();
$posts=DB::表('posts')
->加入('comments\u blogs'、'posts.id'、'='、'comments\u blogs.blog\u id'))
->选择('posts.id as id',DB::raw(“count(*)as count”))
->groupBy('posts.id')
->get();
谢谢你的帮助
Limuz

由于您是按
posts
表的主键进行分组,因此以下内容可以工作。聚合计数需要位于不同的主键上,以避免由于与
徽章
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();

啊,谢谢你,我不擅长,我怎么告诉他把这个计数加到“posts”数组中现在我在同一个错误代码SQLSTATE[42000]:语法错误或访问冲突:1055'blogbirat.posts.user_id'不在群中,我想不出来,听起来他在群中的每一个“select”都打了一下,我希望我能侥幸逃脱。原则是,一旦有了group by,您的选择结果可以包括group by字段(如果是主键)、该行的内容以及需要在聚合函数中包装的其他字段。。很抱歉回退是第二个查询。我现在尝试添加每个字段并将其复制粘贴到group by it“works”,但我不能肯定我从中得到了正确的计数(atm使用演示数据)我真的非常感谢您的帮助我需要找到另一种方法来完成它可能是一个函数或一些我的路由文件没有溢出的东西如果是我,我从原始MySQL开始