Convert SQL to Eloquent to Join multiple table and Count

為{幸葍}努か 提交于 2020-01-16 18:43:27

问题


I have been this SQL working fine, but trying to convert it to Eloquent format, it keeps returning a wrong, SQL entirely which flags error. Coding with 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`

HOW I MADE ELOQUENT QUERY BUILDER Not working though:

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

Any hint would be appreciated


回答1:


Try with this:

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


来源:https://stackoverflow.com/questions/48765310/convert-sql-to-eloquent-to-join-multiple-table-and-count

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!