我需要在我的网站上选择大多数投票文章。现在,我有这个功能处理小错误但我把它写成原始SQL查询。错误是这样的,我得到了大多数带有原始SQL查询的投票文章,然后使用Eloquent的whereIn
方法与id's,但似乎它以随机顺序返回响应。此外,它会破坏Eloquent的->isEmpty()
方法,我在视图中大量使用它。
长话短说,我厌倦了尝试编写原始查询并解决这个小脚本上的大量错误(或副作用)。我想把它带到Eloquent(有关系)并完成它。
我当前的数据库架构:
articles
--id
votes
--id
--user
--article_id
--vote
Articles.id
和votes.article_id
与hasMany
相关(文章可能有很多选票)vote
列只能包含1
和-1
值。group by votes.article_id order by sum(votes.vote)
(我们不仅选择正投票,而是选择投票的SUM.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。
答案 0 :(得分:5)
瞧
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();