Laravel Eloquent的orderBy排序不生效问题求助
修复:按获赞数从高到低展示Laravel问题
问题根源
你当前的代码orderBy('upvotes')默认使用升序排序,所以会把点赞数最少的问题排在前面,导致高赞问题无法优先展示。
解决方案1:仅按点赞数降序排序
修改orderBy方法,添加第二个参数'desc'指定降序:
public function theMostUpVotes() { $questions = Question::orderBy('upvotes', 'desc')->get(); return $questions; // 别忘了返回查询结果 }
解决方案2:按净投票数(点赞-点踩)排序(模拟Stack Overflow逻辑)
如果需要和Stack Overflow一样,按净获赞数(upvotes - downvotes)排序,可以通过orderByRaw直接写SQL表达式:
public function theMostUpVotes() { $questions = Question::orderByRaw('(upvotes - downvotes) desc')->get(); return $questions; }
这种方式会先计算每个问题的净投票数,再按这个数值从高到低排序,更符合论坛的实际需求。
额外提示
如果需要频繁使用净投票数排序,可以给Question模型添加一个访问器,方便后续调用:
// 在Question模型中添加 public function getNetVotesAttribute() { return $this->upvotes - $this->downvotes; }
之后就可以在查询后通过$question->net_votes获取净投票数,不过排序还是建议用数据库层面的orderByRaw,性能更优。
内容的提问来源于stack exchange,提问作者Pouya Vaghefi
相关产品推荐
相关产品推荐

