laravel - 我们如何在 laravel eloquent/querybuilder 中转换 sql
问题描述
基本上我需要根据 cityId 和 postCode 在需要提供一些详细信息的地方显示报告。
因此,如果 cityId 为 NULL 并且 postCode 为 NULL 那么这些记录的计数应该在 data1 之下。
同样, - 当 cityId 在 (123, 456) THEN 这些记录的计数应该在'data2' - 当 cityId 在 (789, 999) THEN 'data3' - 当 cityId 在 (111, 222) THEN 'data4' - ELSE '数据5'
我在这里有 2 个查询:
- 将此 sql 转换为 laravel eloquent/querybuilder 方式。
- 提到的最后一个条件
计数(当 cityId 不为 NULL 且 cityId 不在(123、456、789、999、111、222)然后 1 ELSE NULL END 时的情况)作为来自客户的“data5”)
必须是上述所有条件的 else 部分。
我已经尝试过了,但无法达到预期的结果
$result = Customer::select(Customer::raw("SELECT
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 (111, 222) 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\"
from trial
"))->get();
期望的结果:data1:7 data2:5 data3:12 data4:10 data5:1
解决方案
暂时,我为上面提到的问题找到了一个替代解决方案,它以某种方式解决了我的第一个问题。
仍在寻找第二个问题。
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();
推荐阅读
- c# - C# StreamWrite to Process 未在刷新时执行
- java - 在不使用查看器的情况下将按钮添加到 Eclipse 视图工具栏
- mstest - 尝试使用 MSTest 测试 Entity Framework Core 时出现 System.IO.FileLoadException - 为什么?
- java - 已部署的 WAR 文件中的 ORM 被忽略
- css - css 通过拖动边框而不是角来调整大小的 div
- amazon-ec2 - Amazon 的 EC2 和 Google 的 GCE 之间的 CPU 等式
- mulesoft - 无法安装 MULE EE 服务 指定的服务已存在 (0x411)
- java - 面向对象设计:可扩展和可维护的汽车商店系统
- kubernetes - 如何检查 Kubernetes 注释中的小于条件?
- python - 按索引选择嵌套在列表中的字典