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

Laravel中如何使用CASE语句实现指定规则的多字段排序?

嘿,这个自定义排序需求在Laravel里用orderByRaw()就能完美搞定,它允许我们直接写入原生SQL排序逻辑,刚好适配你这种多条件的CASE排序场景。

你只需要把三个排序规则依次通过链式调用添加进去就行,代码示例如下:

return $this->hasMany('Link')
    // 第一步:按lang的自定义规则排序(升序,1→2→3)
    ->orderByRaw("CASE `lang` WHEN 'a' THEN 1 WHEN 'as' THEN 2 WHEN 'asd' THEN 3 END")
    // 第二步:按quality的自定义规则排序(升序,1→10)
    ->orderByRaw("CASE `quality` WHEN 'd' THEN 1 WHEN 'ds' THEN 2 WHEN 'dsa' THEN 3 WHEN 'dsaa' THEN 4 WHEN 'dsaaa' THEN 6 WHEN 'dsaaaa' THEN 7 WHEN 'dsaaaaa' THEN 8 WHEN 'dsaaaaaaaaa' THEN 9 WHEN 'dsaaaa' THEN 10 END")
    // 第三步:按views降序排序
    ->orderBy('views', 'desc');

补充说明:

  • orderByRaw()是Laravel提供的原生SQL排序方法,能直接支持复杂的CASE逻辑,比普通的orderBy()灵活得多。
  • 默认情况下,CASE语句的结果是升序排列的(数值小的在前),如果需要倒序,只需要在CASE语句末尾加 DESC即可,比如:CASE ... END DESC。
  • 字段名外的反引号(`)是为了避免字段名与SQL关键字冲突,如果你确定lang、quality不是关键字,也可以省略,但加上更稳妥。
  • 最后一步的views排序用普通的orderBy('views', 'desc')就足够,当然你也可以写成orderByRaw('views DESC'),效果完全一致。

内容的提问来源于stack exchange,提问作者Ibrahim Aldar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:46:00