【问题标题】:Convert SQL to Eloquent to Join multiple table and Count将 SQL 转换为 Eloquent 以连接多个表并计数
【发布时间】:2018-07-23 17:38:09
【问题描述】:

我的这个 SQL 工作正常,但试图将其转换为 Eloquent 格式,它一直返回一个错误的 SQL,完全标记错误。 使用 Laravel 5.5 编码

Select arm_articles.article_topic, arm_articles.id, arm_articles.article_id, 
COUNT(arm_article_views.view_article_id) AS TotalViews, 
COUNT( arm_article_likes.liked_article_id) AS TotalLikes, 
COUNT( arm_article_comments.comment_article_id) AS TotalComments
FROM arm_articles 
LEFT JOIN  arm_article_views  ON  arm_articles.article_id = arm_article_views.view_article_id 
LEFT JOIN  arm_article_likes  ON  arm_articles.article_id = arm_article_likes.liked_article_id 
LEFT JOIN  arm_article_comments  ON  arm_articles.article_id = arm_article_comments.comment_article_id 
GROUP BY arm_articles.article_id 
ORDER BY TotalLikes, TotalLikes, TotalComments ASC`

我是如何制作 ELOQUENT QUERY BUILDER 却不工作:

return Datatables::of(PostModel::leftJoin('arm_article_views', 'arm_article_views.view_article_id', '=', 'arm_articles.article_id')
       ->leftJoin('arm_article_likes','arm_article_likes.liked_article_id', '=', 'arm_articles.article_id')
       ->leftJoin('arm_article_comments', 'arm_article_comments.comment_article_id','=','arm_articles.article_id')
       ->selectRaw(
           'arm_articles.*, 
           count(arm_article_views.view_article_id) AS ViewCount'
        ) 
        ->groupBy('arm_articles.article_id')->orderBy('ViewCount','DESC')
        ->where('arm_articles.article_contributor_id','=',$contributor_id)
        ->getQuery())->make(true);

任何提示将不胜感激

【问题讨论】:

  • @Nikola Gavric 你有线索吗?
  • 我已经发布了一个答案,等你看看它是否成功

标签: php mysql sql laravel-5 eloquent


【解决方案1】:

试试这个:

DB::table('arm_articles')
        ->leftJoin('arm_article_views', 'arm_articles.article_id', '=', 'arm_article_views.view_article_id')
        ->leftJoin('arm_article_likes', 'arm_articles.article_id', '=', 'arm_article_likes.liked_article_id')
        ->leftJoin('arm_article_comments', 'arm_articles.article_id', '=', 'arm_article_comments.comment_article_id')
        ->groupBy('arm_articles.article_id', 'article_topic')
        ->select(
            DB::raw('count(arm_article_views.view_article_id) as TotalViews'),
            DB::raw('count(arm_article_likes.liked_article_id) as TotalLikes'),
            DB::raw('count(arm_article_comments.comment_article_id) as TotalComments'),
            'arm_articles.article_id',
            'article_topic'
        )->get();

【讨论】:

  • 感谢您的回答,但是当我尝试在 select ->select('arm_articles.*', 上添加更多字段时遇到了一些 SQL 错误错误消息 SQLSTATE[42000]:语法错误或访问冲突:1055 'knowledge_db.arm_articles .id' 不在 GROUP BY 中(SQL:选择 arm_articles.*,count(arm_article_views.view_article_id) 作为 TotalViews,count(arm_article_likes.liked_article_id) 作为 TotalLikes,count(arm_article_cmets.comment_a........ .
  • DB::table('arm_articles')->leftJoin('arm_article_views', 'arm_articles.article_id', '=', 'arm_article_views.view_article_id')->leftJoin('arm_article_likes', ' arm_articles.article_id', '=', 'arm_article_likes.liked_article_id')->leftJoin('arm_article_cmets', 'arm_articles.article_id', '=', 'arm_article_cmets.comment_article_id')->groupBy('arm_articles.article_id')- >select('arm_articles.*',DB::raw('count(arm_article_views.view_article_id) as TotalViews'),DB::raw('count(arm_article_likes.liked_article_id) as TotalLikes'),DB::raw('count (arm_article_cmets.comment_article_id) 为 ....
  • 您按article_id 分组,因此您不能使用* 通配符
  • 我尝试使用 ->select('arm_articles.id','arm_articles.article_id','arm_articles.article_category_id','arm_articles.article_topic','arm_articles.article_type','arm_articles.article_date','arm_articles.article_active','arm_articles.article_category','arm_articles.article_tag', 并返回相同的错误或者我如何将 article_id 和 article_topic 包含到 SQL 中的选定字段中
  • 刚刚运行更新的 SQL 并得到错误 SQLSTATE[42000]: Syntax error or access violation: 1055 'knowledge_db.arm_articles.article_topic' isn't in GROUP BY (SQL: select count(arm_article_views.view_article_id) as TotalViews, count(arm_article_likes.liked_article_id) as TotalLikes, => 似乎一旦您将任何字段添加到选择中,它就会标记
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-02
  • 1970-01-01
  • 1970-01-01
  • 2016-07-22
  • 2021-07-11
  • 2018-09-28
  • 1970-01-01
相关资源
最近更新 更多