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

Laravel中如何用get()获取全表列并仅对指定列应用SQL CASE

当然可以!Laravel的查询构造器提供了非常灵活的方式来实现这个需求,完全不用手动列出所有列名。这里有两种简洁的方案:

方案1:使用select('*') + addSelect()

先通过select('*')获取所有原始列,再用addSelect()追加经过CASE语句处理的pick_8和pick_12列(别名和原列名一致会自动覆盖原列值):

$products = Product::where('is_archive', 0)
    ->select('*')
    ->addSelect([
        DB::raw('CASE WHEN pick_8 = 1 THEN 1 ELSE 0 END AS pick_8'),
        DB::raw('CASE WHEN pick_12 = 1 THEN 1 ELSE 0 END AS pick_12')
    ])
    ->get();

方案2:使用selectRaw()直接编写SQL片段

如果你觉得上面的写法有点繁琐,可以直接用selectRaw()把所有逻辑整合在一起,*会自动包含所有列:

$products = Product::where('is_archive', 0)
    ->selectRaw('*, 
        CASE WHEN pick_8 = 1 THEN 1 ELSE 0 END AS pick_8, 
        CASE WHEN pick_12 = 1 THEN 1 ELSE 0 END AS pick_12')
    ->get();

补充说明

  • 两种方案的核心都是利用*来自动获取所有列,避免手动枚举列名的麻烦。
  • 如果你的CASE逻辑比较复杂(比如多个分支),可以把DB::raw里的语句写得更详细,只要符合SQL语法即可。
  • 如果你希望在模型层面统一处理这些字段,也可以考虑使用访问器,但这种方式是在查询后处理数据,而上面的方案是在数据库层面完成处理,性能上会更优。

内容的提问来源于stack exchange,提问作者Muzammil Baloch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:40:02