Yii2:查询未正确生成

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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中工作?

答案

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

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

->where('Data_Sap=data_ngin')

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

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

以上是关于Yii2:查询未正确生成的主要内容,如果未能解决你的问题,请参考以下文章

yii2项目实战-路由美化以及如何正确的生成链接

YII2如何使用查询生成器更新字段

Yii2片段缓存详解

AppSync 示例应用程序中未生成片段

片段中的 Asynctask 未到达 onPostExecute

CAML 查询未正确排序