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

Laravel 8 Query Builder结合DB Raw实现MS SQL的CASE字段拼接查询

解决方案

你原有代码未实现原生SQL中提取picture字段路径末尾文件名的核心逻辑,且需注意MSSQL语法与PHP字符串引用的兼容问题,正确代码如下:

基础可用版本

use Illuminate\Support\Facades\DB;

// 若实际表名为Staff,请将tblFaculty替换为Staff
$faculties = DB::table('tblFaculty')
    ->select(
        'fname',
        'lname',
        'title',
        DB::raw("CASE 
            WHEN picture IS NULL THEN 'https://www.aaa.com/images/interior/bench2.jpg'
            ELSE 'https://www.aaa.com/images/staff/' + REVERSE(LEFT(REVERSE(picture), CHARINDEX('/', REVERSE(picture)) - 1)) 
        END AS picture")
    )
    ->get();
dd($faculties);

边界兼容版本(推荐)

如果picture字段可能存在无/的纯文件名场景,可新增判断避免CHARINDEX返回0时触发长度计算错误:

use Illuminate\Support\Facades\DB;

$faculties = DB::table('tblFaculty')
    ->select(
        'fname',
        'lname',
        'title',
        DB::raw("CASE 
            WHEN picture IS NULL THEN 'https://www.aaa.com/images/interior/bench2.jpg'
            WHEN CHARINDEX('/', REVERSE(picture)) = 0 THEN 'https://www.aaa.com/images/staff/' + picture
            ELSE 'https://www.aaa.com/images/staff/' + REVERSE(LEFT(REVERSE(picture), CHARINDEX('/', REVERSE(picture)) - 1)) 
        END AS picture")
    )
    ->get();
dd($faculties);

注意事项

  • SQL语句内的字符串常量统一使用单引号,外层用双引号包裹DB::raw的内容,避免PHP语法解析冲突
  • 请根据实际业务的资源域名、路径前缀调整对应字符串内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:39:01