我们如何在laravel eloquent / querybuilder中转换sql

时间:2019-05-28 14:57:11

标签: laravel postgresql eloquent laravel-query-builder

基本上,我需要显示报告,在其中我需要根据cityId和postCode提供一些详细信息。

因此,如果cityId为NULL而postCode为NULL,则这些记录的计数应在data1下。

类似地,  -当cityId IN(123,456)时,这些记录的计数应在'data2'中  -当cityId输入(789,999)时'data3'  -当cityId IN(111,222)然后是'data4'  -ELSE'data5'

我在这里有2个查询:

  1. 将此sql转换为laravel雄辩/ querybuilder方式。
  2. 最后提到的条件
  

COUNT(当cityId不为空且cityId不为IN(123、456、789、999、111、222)然后1 ELSE NULL END时)为\“ data5 \”   来自客户           ”

必须是以上所有条件的其他部分。

我已经尝试过了,但是无法达到预期的效果

httpAuthorization

所需结果: 数据1:7 数据2:5 数据3:12 资料4:10 数据5:1

1 个答案:

答案 0 :(得分:0)

就目前而言,我为上述问题找到了替代解决方案,以某种方式解决了我的第一点问题。

仍在寻找第二个问题。

DB::table('customers')
        ->select(
            DB::raw('COUNT(CASE WHEN cityId IS NULL AND postCode IS NULL then 1 ELSE NULL END) as "data1",
                    COUNT(CASE WHEN cityId IN (123, 456) then 1 ELSE NULL END) as "data2",
                    COUNT(CASE WHEN cityId IN (789,999) then 1 ELSE NULL END) as "data3",
                    COUNT(CASE WHEN cityId IN (4965,4959) then 1 ELSE NULL END) as "data4",
                    COUNT(CASE WHEN cityId IS NOT NULL AND cityId NOT IN (123, 456, 789, 999, 111, 222) then 1 ELSE NULl END ) as "data5"')
        )->get();