有没有办法从CDbCriteria获取查询的字符串表示?用于测试和调试目的。
答案 0 :(得分:4)
您可以像这样使用日志和分析配置main.php:
'components'=>array(
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class'=>'CWebLogRoute',
'categories'=>'system.db.CDbCommand',
'showInFireBug'=>true,
),
),
),
'db'=>array(
'enableProfiling'=>true,
'enableParamLogging'=>true,
),
),
答案 1 :(得分:3)
我花了很多时间来找到这个问题的答案,所以想与你们分享。希望这可以节省您宝贵的时间。
正如上面Jon所提到的:CDbCriteria
没有聚合足够的信息来构造完整的查询,你必须使用模型类信息来对其进行查询约束。
正如Yii docs CDbCriteria中给出的例子;这就是你基本上如何使用它 -
$criteria=new CDbCriteria();
$criteria->compare('status',Post::STATUS_ACTIVE);
$criteria->addInCondition('id',array(1,2,3,4,5,6));
$posts = Post::model()->findAll($criteria);
此处Post
是执行查询条件的模型的名称。
因此,如果您想获取用CDbCriteria编写的查询的文本表示,您还必须涉及模型信息,即Post。
这是你可以做到的 -
$model = new Post();
$query = $model->getCommandBuilder()->createFindCommand($model->getTableSchema(), $criteria)->getText();
当您在$query
变量中打印值时,它会打印原始查询。
希望这有帮助。