【发布时间】:2018-02-14 18:06:55
【问题描述】:
Yii1 是否有任何本地方法来获取带有构建变量的原始 SQL?
我尝试使用CDbExpression 和CommandBuilder 构建基于几个子查询的复杂查询。结果我得到了这个:
SELECT * FROM `news` `t` WHERE id IN (:ycp0, :ycp1, :ycp2, :ycp3, :ycp4) LIMIT 5
标准内容的转储:
CDbCriteria Object (
[select] => *
[condition] => id IN (:ycp0, :ycp1, :ycp2, :ycp3, :ycp4)
...
[params] => Array(
[:ycp0] => CDbExpression Object(
[expression] => SELECT id FROM `news` `t` WHERE (rubric=:rb1) AND (:im2 & `im`=:im2) LIMIT 1
[params] => Array(
[:rb1] => 1
[:im2] => 2
)
)
...
)
)
我期望编译后的查询字符串是这样的:
SELECT * FROM .. WHERE id IN(
(SELECT id FROM .. WHERE .. ORDER BY .. LIMIT 1),
(SELECT id FROM .. WHERE .. ORDER BY .. LIMIT 1)
) ORDER BY .. LIMIT 5
这就是我在代码中所做的
$criteria = new CDbCriteria( ... );
$sql = $this->commandBuilder->createFindCommand($tableName, $criteria)->getText();
$queries[] = new CDbExpression($sql, $criteria->params);
然后我尝试将子查询组合成一个复杂的查询
$criteria = new CDbCriteria( ... );
$criteria->addInCondition('id', $queries);
最后,我尝试将结果作为 SQL 查询获得
$sql = $this->commandBuilder->createFindCommand($tableName, $criteria)->getText();
【问题讨论】: