【问题标题】:Yii2: Query not being generated correctlyYii2:查询未正确生成
【发布时间】:2018-03-07 02:55:06
【问题描述】:

我有这个问题:

$nginSumSubquery = NginAgentDetail::find()
->select(['CLIENT_ID', 'sum(ngin_agent_detail.VALUES) as nginSum','STR_TO_DATE(OPERATION_DATE, '."'%Y-%m-%d %H:%i'".') AS data_ngin'])
->groupBy(['ngin_agent_detail.CLIENT_ID', 'data_ngin']);

$sapSumSubquery = Sap::find()
         ->select(['Criado_por', 'sum(sap.Val_liq_moeda) as sapValue', 'STR_TO_DATE(Data_doc, '."'%d.%m.%Y %H:%i'".') AS Data_Sap'])
        ->groupBy(['sap.Criado_por', 'sap.Data_doc']);

$query->select(['etu_loja.ID', 'id_master', 'nginSum', 'sapValue', 'regiao', 'etu_loja.user', 'Atendedora', 'Loja', 'Data_Sap', 'data_ngin'])
->leftJoin(['nginAgentDetail' => $nginSumSubquery], 'nginAgentDetail.CLIENT_ID = etu_loja.ID')
->leftJoin(['sap' => $sapSumSubquery], 'sap.Criado_por = etu_loja.user')
->where(['data_ngin' => 'Data_Sap']);

以及生成的sql查询:

SELECT 
    `etu_loja`.`ID`,
    `id_master`,
    `nginSum`,
    `sapValue`,
    `regiao`,
    `etu_loja`.`user`,
    `Atendedora`,
    `Loja`,
    `Data_Sap`,
    `data_ngin`
FROM
    `etu_loja`
        LEFT JOIN
    `master_loja` ON `etu_loja`.`id_master` = `master_loja`.`id`
        LEFT JOIN
    (SELECT 
        CLIENT_ID,
            SUM(ngin_agent_detail.VALUES) AS nginSum,
            STR_TO_DATE(OPERATION_DATE, '%Y-%m-%d') AS data_ngin
    FROM
        `ngin_agent_detail`
    GROUP BY `ngin_agent_detail`.`CLIENT_ID` , `data_ngin`) `nginAgentDetail` ON nginAgentDetail.CLIENT_ID = etu_loja.ID
        LEFT JOIN
    (SELECT 
        Criado_por,
            SUM(sap.Val_liq_moeda) AS sapValue,
            STR_TO_DATE(Data_doc, '%d.%m.%Y') AS Data_Sap
    FROM
        `sap`
    GROUP BY `sap`.`Criado_por` , `sap`.`Data_doc`) `sap` ON sap.Criado_por = etu_loja.user
WHERE
    `Data_Sap` = 'data_ngin'

为什么 Yii 在最后一个 where 子句的左侧而不是右侧添加反引号?

`WHERE
        `Data_Sap` = 'data_ngin'

如果我只是在 mysql 工作台中用反引号替换单引号,我的意思是,'data_ngin' 到 `data_ngin` 查询有效。

如何让这个查询在 Yii 中工作?

【问题讨论】:

    标签: php yii2


    【解决方案1】:

    方法where()hash format 最适合您想要选择列值的情况。 data_ngin 被视为字符串而不是列名。

    在您的情况下,您想使用更类似于原始 SQL 语句的string format

    ->where('Data_Sap=data_ngin')
    

    或者如果上述方法仍然不起作用

    ->where('`Data_Sap`=`data_ngin`')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 2017-01-04
      • 2019-09-11
      • 1970-01-01
      • 2018-09-07
      • 2015-02-20
      相关资源
      最近更新 更多