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

Laravel Query Builder嵌套CASE语句异常求助:非AO01值未返回NO

Laravel DB::raw嵌套CASE语句问题修复

问题原因

你的代码存在两个关键问题:

  1. 字段名未加反引号:SQL中包含数字和特殊组合的字段名需要用反引号包裹,否则会被错误解析为算术表达式(比如921959X45X591会被当成921959 * 45 * 591`),导致条件判断完全偏离预期。
  2. 字符串引号错误:使用了HTML转义的",在SQL执行时会被当作字符串的一部分(或被解析为标识符,取决于SQL模式),导致= "AO01"的匹配逻辑失效。

修正后的代码

可以简化嵌套CASE为多条件CASE结构,逻辑更清晰且避免错误:

DB::raw('(CASE 
            WHEN `lime_survey_921959`.`921959X45X591` IS NULL THEN "YES"
            WHEN `lime_survey_921959`.`921959X45X590` = "AO01" THEN "YES"
            ELSE "NO" 
         END) AS HasActivity')

或者使用单引号包裹字符串(更符合SQL标准写法):

DB::raw("(CASE 
            WHEN `lime_survey_921959`.`921959X45X591` IS NULL THEN 'YES'
            WHEN `lime_survey_921959`.`921959X45X590` = 'AO01' THEN 'YES'
            ELSE 'NO' 
         END) AS HasActivity")

逻辑验证

修正后的代码完全匹配你的需求:

  • 当921959X45X591为Null时,直接返回YES
  • 当921959X45X591非Null时,判断921959X45X590是否等于AO01,是则返回YES,否则返回NO

内容的提问来源于stack exchange,提问作者Anônimo Man

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:10:19