Yii2:查询未正确生成

时间:2018-03-06 18:46:49

标签: php yii2

我有这个问题:

$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 workbench中用反引号替换单引号,我的意思是,' data_ngin'到`data_ngin`查询有效。

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

1 个答案:

答案 0 :(得分:1)

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

在您的情况下,您希望使用与原始SQL语句更相似的string format

->where('Data_Sap=data_ngin')

或者上述情况仍然无效

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