2017-04-07 51 views
0

我对活动记录进行了查询,并且不适用于我的数据查询我的网格视图为空。我尝试手动完成,结果是好的。我发现和我发现问题的原因,比较有关错误的SQL查询请参阅下面的代码。Yii2错误的活动记录调试工具栏中的查询语法

活动记录查询:

$query-> innerJoinWith(['askPos']) 
      ->andwhere(['ask_policy.id'=>'ask_po.id_policy']) 
      ->innerjoinWith(['client'])->andWhere(['id_client'=>Yii::$app->user->identity->id_client])->all(); 



**in yii debug show me sql : ** 
`SELECT `ask_policy`.* FROM `ask_policy` INNER JOIN `ask_po` ON `ask_policy`.`id` = `ask_po`.`id_policy` INNER JOIN `ask_client` ON `ask_policy`.`id_client` = `ask_client`.`id` WHERE (`ask_policy`.`id`='ask_po.id_policy') AND (`id_client`=930);` 

上面的代码无法正常工作。问题是

`ask_policy`.`id`='ask_po.id_policy' 

**它应该是:**

SELECT `ask_policy`.`policy_num`, `ask_po`.po_num, ask_client.insuranced_name FROM `ask_policy` INNER JOIN `ask_po` ON `ask_policy`.`id` = `ask_po`.`id_policy` INNER JOIN `ask_client` ON `ask_policy`.`id_client` = `ask_client`.`id` WHERE (`ask_policy`.`id`=`ask_po`.`id_policy`) AND (`id_client`=930); 

或活动记录查询这样如下:在警予调试

$query->innerjoinWith(['client'])->where(['id_client'=>Yii::$app->user->identity->id_client]) 
      ->innerJoinWith(['askPos']) 
      ->andWhere(['ask_policy.id'=>'id_policy'])->all(); 

告诉我SQL:

SELECT `ask_policy`.* FROM `ask_policy` INNER JOIN `ask_client` ON `ask_policy`.`id_client` = `ask_client`.`id` INNER JOIN `ask_po` ON `ask_policy`.`id` = `ask_po`.`id_policy` WHERE (`id_client`=930) AND (`ask_policy`.`id`='ask_po.id_policy') 

**它应该是:**

SELECT `ask_policy`.`policy_num`, `ask_po`.po_num, ask_client.insuranced_name FROM `ask_policy` 
INNER JOIN `ask_client` ON `ask_policy`.`id_client` = `ask_client`.`id` 
INNER JOIN `ask_po` ON `ask_policy`.`id` = `ask_po`.`id_policy` 
WHERE (`id_client`=930) AND (**`ask_policy`.`id`=`id_policy`**) 

为什么上面的代码可以是手动的SQL查询不同?我是否在使用它时犯了错误?

回答

0

在andWhere条件下更新您的查询。不要在这里传递数组,而不是像下面那样传递字符串。

$query-> innerJoinWith(['askPos']) 
     ->andwhere("ask_policy.id = ask_po.id_policy") 
     ->innerjoinWith(['client'])->andWhere(['id_client'=>Yii::$app->user->identity->id_client])->all(); 
+0

非常感谢你 –