【问题标题】:How can we convert the sql in laravel eloquent / querybuilder我们如何在 laravel eloquent/query builder 中转换 sql
【发布时间】:2019-10-14 03:31:07
【问题描述】:

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

所以如果 cityId 为 NULL 并且 postCode 为 NULL 那么这些记录的计数应该在 data1 之下。

同样, - 当 cityId IN (123, 456) THEN 这些记录的计数应该在“data2”中 - 当 cityId 在 (789, 999) THEN 'data3' - 当 cityId 在 (111, 222) THEN 'data4' - ELSE 'data5'

我在这里有 2 个查询:

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

计数(当 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();

期望的结果: 数据1:7 数据2:5 数据3:12 数据4:10 数据5:1

【问题讨论】:

  • 你的结构对我来说有点不清楚,但你可能会想要使用 Laravel 关系之类的东西:Customer::whereHas('transaction', function($query) { $query->whereNotNull('tsid')->whereNotIn('afid', [123, 456, 789, 999, 111, 222]); }
  • @ceejayoz 我已经更新了我的查询以便更好地理解

标签: laravel postgresql eloquent laravel-query-builder


【解决方案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();

【讨论】:

    猜你喜欢
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    • 2019-08-11
    • 2020-04-26
    • 2015-06-15
    • 2014-01-08
    • 2021-02-04
    相关资源
    最近更新 更多