Laravel 8 - MS SQL - 查询生成器 - 使用 DB Raw。尝试使代码正确,使其像工作的 MSSQL 代码一样工作

Posted

技术标签:

【中文标题】Laravel 8 - MS SQL - 查询生成器 - 使用 DB Raw。尝试使代码正确,使其像工作的 MSSQL 代码一样工作【英文标题】:Laravel 8 - MS SQL - Query Builder - using DB Raw. Trying to get the code right to make it work like the working MSSQL code 【发布时间】:2021-11-17 19:54:09 【问题描述】:

如何在 Laravel 中编写此代码以使下面的查询正常工作?

工作查询:

select  
fname,
lname,
title,
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
from Staff

我的许多尝试之一

  $faculties =
  DB::table('tblFaculty')->
  select(
    ['Fname',
    'Lname',
    'title',
    DB::raw('(case when picture IS NULL then "https://www2.aaa.com/images/interior/bench2.jpg"
    else "https://www2.aaa.com/images/facultystaff/" end) as picture')])->get();
  dd($faculties);

感谢您的帮助。我已经尽量把问题说清楚了。

【问题讨论】:

我想我已经接近了。我对 CHARINDEX 有疑问,因为它似乎需要 '/' - raw('') 内的单引号尝试转义等。 【参考方案1】:

以防万一有人需要这种帮助,这里终于奏效了。

  $faculties =
  DB::table('tblFaculty')->
  select(
    ['Fname',
    'Lname',
    'title',
    'picture',
    DB::raw("(case when (picture IS NULL) then
    'https://www.aaa.com/images/interior/bench2.jpg' else
    'https://www.aaa.com/images/facultystaff/' + reverse(left(reverse(picture), CHARINDEX('/', REVERSE(picture)) - 1))
    end) as pictureUrl")])->get();

  dd($faculties);

【讨论】:

以上是关于Laravel 8 - MS SQL - 查询生成器 - 使用 DB Raw。尝试使代码正确,使其像工作的 MSSQL 代码一样工作的主要内容,如果未能解决你的问题,请参考以下文章

如何将 sql 转换为查询生成器 laravel

我如何将 SQL 原始查询重写为 Laravel 查询生成器

如何在查询生成器 laravel 中执行此 SQL

如何将此 sql 查询转换为 laravel 查询生成器

Laravel - 查询生成器 - 使用 LPAD 语句的 SQL 字段

将 SQL 转换为 Laravel 查询生成器错误 - 需要专家级别