从CDbCriteria获取字符串表示

时间:2012-03-27 19:06:15

标签: yii

有没有办法从CDbCriteria获取查询的字符串表示?用于测试和调试目的。

2 个答案:

答案 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变量中打印值时,它会打印原始查询。

希望这有帮助。