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

时间:2018-08-06 11:24:58

标签: mysql sql laravel

我有2个表格,第一个评论和文章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

2 个答案:

答案 0 :(得分:2)

您正在使用“修饰符”,这意味着->count('comments.id')不再返回QueryBuilder的实例,而是返回常规类型(integer)。

由于PHP中的integers不是类,因此您试图在非类上执行方法,这将导致显示此错误消息。

您肯定知道其他整理者,例如->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();

答案 1 :(得分:0)

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();

尝试一下,让我知道您是否仍然遇到任何问题。