如何将mysql查询转换为laravel查询生成器?

daolsyd0  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(299)

我有两个表和在第一条评论和文章id,在第二条标题,id,文章类别。我想要一篇评论最多的文章的标题。

SELECT comments.article_id, news.title, news.category_id,
    COUNT(comments.id) as counts 
  FROM comments 
  JOIN news ON news.id = comments.article_id 
  GROUP BY(article_id) 
  ORDER BY counts DESC 
  LIMIT 3

我试过这个:

$articles = DB::table('comments')
        ->join('news', 'news.id', '=', ' comments.article_id')
        ->select(comments.article_id', 'news.title', ' news.category_id')
        ->count('comments.id')
        ->groupBy('article_id')
        ->orderBy(DB::raw('count(comments.id)', 'desc')
        ->limit(3)
        ->get();

但有:

Call to a member function groupBy() on integer
pbpqsu0x

pbpqsu0x1#

您使用的是“finisher”,意思是 ->count('comments.id') 不返回的示例 QueryBuilder 不过是普通类型( integer ).
作为 integers 在php中,您试图在非类上执行一个方法,这导致显示此错误消息。
你肯定知道其他的终结者喜欢 ->sum() , ->all() , ->get() , ...
把你的台词去掉 ->count('comments.id') 你就可以走了:

$articles = DB::table('comments')
  ->join('news', 'news.id', '=', ' comments.article_id')
  ->select('comments.article_id', 'news.title', ' news.category_id')
  ->groupBy('article_id')
  ->orderBy(DB::raw('count(comments.id)', 'desc')
  ->limit(3)
  ->get();
q9yhzks0

q9yhzks02#

DB::table('comments')
->join('news', 'news.id', '=', ' comments.article_id')
->selectRaw('comments.article_id', 'news.title', ' news.category_id', 'count(comments.id) as countsxyz')
->groupBy('article_id')
->orderBy(DB::raw('countsxyz'), 'desc')
->limit(3)
->get();

试试这个,如果你还面临任何问题,请告诉我。

相关问题