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

最佳答案

您正在使用“finisher”,这意味着->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();

关于mysql - 如何将mysql查询转换为laravel查询生成器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51706515/

10-11 01:38