Laravel 我怎样才能用join和sum来表达我的雄辩?

Laravel 我怎样才能用join和sum来表达我的雄辩?,laravel,eloquent,Laravel,Eloquent,我需要选择我的网站上投票最多的文章。现在,我使用这个功能处理一些小错误,但我将其作为原始SQL查询编写。Bug是这样的,我使用原始sql查询获得大多数投票的文章,然后使用Eloquent的方法,其中方法带有id,但它似乎以随机顺序返回响应。此外,它还将破坏我在视图中大量使用的Eloquent的->isEmpty()方法 长话短说,我厌倦了在这个小脚本上编写原始查询和解决大量bug(或副作用)。我想把它带到有说服力的(人际关系)中,然后就完蛋了 我当前的数据库架构: articles --id

我需要选择我的网站上投票最多的文章。现在,我使用这个功能处理一些小错误,但我将其作为原始SQL查询编写。Bug是这样的,我使用原始sql查询获得大多数投票的文章,然后使用Eloquent的
方法,其中
方法带有id,但它似乎以随机顺序返回响应。此外,它还将破坏我在视图中大量使用的Eloquent的
->isEmpty()
方法

长话短说,我厌倦了在这个小脚本上编写原始查询和解决大量bug(或副作用)。我想把它带到有说服力的(人际关系)中,然后就完蛋了

我当前的数据库架构:

articles
--id

votes
--id
--user
--article_id
--vote
  • Articles.id
    投票。Articles\u id
    hasmall
    相关(一篇文章可能有很多投票)
  • vote
    列只能包含
    1
    -1
  • 我需要运行一个查询,选择前10名投票最积极的文章。在原始sql中,它是
    按票数分组.article\u id按总和排序(voces.vote)
    (我们不只是选择正票数,而是选择票数总和.vote列。)
  • 例如:

    articles.id
    1
    2
    
    votes.id      votes.user       votes.article_id      votes_vote
    1             User1            1                     1
    2             User2            1                     1
    3             User3            1                     -1 (this is negative vote)
    4             User1            2                     1
    5             User2            2                     1
    
    输出应为:

    Article 2 has (2) vote rating. // 1 + 1
    Article 1 has (1) vote rating  // 1 + 1 - 1
    
    我该怎么做

    附言:如果你愿意,你可以使用Eloquent的
    DB::raw
    方法,只要它使用Eloquent。

    voila

    Article::leftJoin(
        DB::raw('(SELECT article_id, SUM(vote) AS votes FROM votes GROUP BY post_id) as v'),
        'v.post_id', '=', 'posts.id'
    )->orderBy('votes', 'desc')->take(10)->get();
    

    非常感谢。虚拟拥抱。如果它更简洁的话,可能是一个更好的问题!