You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 05:02:04