You need to enable JavaScript to run this app. Laravel 7 如何在查询构造器/原生查询中使用CASE/IF生成衍生status字段
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 7 如何在查询构造器/原生查询中使用CASE/IF生成衍生status字段

报错核心原因
  • 语法规则混淆:你使用的PostgreSQL(从报错格式可判断)规定,字符串字面量必须用单引号包裹,双引号仅用于标识表、列等数据库对象。你代码里写的"0"、"Yes"、"No"全部被数据库识别为列名,因此抛出column "0" does not exist的错误。
  • 多余的类型判断:is_active本身就是布尔类型,不需要额外和字符串格式的"0"做等值判断,直接基于布尔值本身做判断即可,刚好匹配你要的映射逻辑:is_active为false时status返回Yes,is_active为true时status返回No。
可正常运行的修正代码
$data = DB::table('my_table as app')
    ->select('fullname', 'is_active',
        DB::raw("(
            CASE 
                WHEN app.is_active = false THEN 'Yes' 
                ELSE 'No' 
            END
        ) AS status")
    )
    ->get();

执行后返回的结果完全匹配预期:

fullnameis_activestatus
Mr. XfalseYes
Mr. ZtrueNo

补充说明:如果你的数据库是MySQL、且布尔类型底层存储为tinyint(0代表false,1代表true),只需要把判断条件改成WHEN app.is_active = 0 THEN 'Yes'即可,不需要给数字加引号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 21:15:00