【发布时间】:2014-04-09 06:22:13
【问题描述】:
我需要在我的网站上选择投票最多的文章。现在,我有这个功能可以处理一些小错误,但我把它写成一个原始的 SQL 查询。错误就像,我使用原始 sql 查询获得投票最多的文章,然后使用 Eloquent 的 whereIn 方法和 id,但似乎它以随机顺序返回响应。此外,它会破坏 Eloquent 的 ->isEmpty() 方法,我在我的观点中大量使用该方法。
长话短说,我厌倦了尝试编写原始查询并解决这个小脚本上的许多错误(或副作用)。我想把它带到 Eloquent(有关系)并完成它。
我当前的数据库架构:
articles
--id
votes
--id
--user
--article_id
--vote
-
Articles.id和votes.article_id与hasMany相关(一篇文章可能有很多票) -
vote列只能包含1和-1值。 - 我需要运行一个查询来选择前 10 篇最积极的投票文章。在原始 sql 中,它是
group by votes.article_id order by sum(votes.vote)(我们不只选择正面投票,而是选择 votes.vote 列的 SUM。)
例如:
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。
【问题讨论】:
-
如果它更简洁可能是一个更好的问题!