Yii2 调试工具栏中错误的活动记录查询语法
Yii2 Wrong active record Query syntax in debug toolbar
我查询了活动记录,但对我的数据查询不起作用,我的网格视图是空的。我尝试手动进行,结果还可以。我找到了问题的原因,要比较错误的 sql 查询,请参见下面的代码。
活动记录查询:
$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();
在 yii 调试中显示 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查询不同?我是不是用错了?
更新您对 andWhere 条件的查询。不要在这里传递数组,而是像下面那样传递字符串。
$query-> innerJoinWith(['askPos'])
->andwhere("ask_policy.id = ask_po.id_policy")
->innerjoinWith(['client'])->andWhere(['id_client'=>Yii::$app->user->identity->id_client])->all();
我查询了活动记录,但对我的数据查询不起作用,我的网格视图是空的。我尝试手动进行,结果还可以。我找到了问题的原因,要比较错误的 sql 查询,请参见下面的代码。
活动记录查询:
$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();
在 yii 调试中显示 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查询不同?我是不是用错了?
更新您对 andWhere 条件的查询。不要在这里传递数组,而是像下面那样传递字符串。
$query-> innerJoinWith(['askPos'])
->andwhere("ask_policy.id = ask_po.id_policy")
->innerjoinWith(['client'])->andWhere(['id_client'=>Yii::$app->user->identity->id_client])->all();