Yii 从CDbCriteria获取字符串表示形式

Yii 从CDbCriteria获取字符串表示形式,yii,Yii,是否有任何方法可以从中获取查询的字符串表示形式?用于测试和调试目的。您可以使用日志记录和评测来配置main.php,如下所示: 'components'=>array( 'log'=>array( 'class'=>'CLogRouter', 'routes'=>array( array( 'class'=>'CWebLogRoute',

是否有任何方法可以从中获取查询的字符串表示形式?用于测试和调试目的。

您可以使用日志记录和评测来配置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,
    ),              
),

我花了很多时间来寻找这个问题的答案,所以我想和你们分享一下。希望这能节省你宝贵的时间


正如Jon在上面提到的:
CDbCriteria
没有聚合足够的信息来构造完整的查询,您还必须使用模型类信息,您将在这些信息上放置查询约束

如Yii文件中给出的示例;这就是你使用它的基本方式-

$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
变量中打印值时,它将打印原始查询


希望这能有所帮助。

CDbCriteria
没有聚合足够的信息来构造完整的查询。模型类也有大量的相关信息,因此您需要同时涉及这两个方面。好的,如果我添加了带有enableProfiling、enableParamLogging和showInFireBug的行(这些是我配置中唯一缺少的行),那么如何获取SQL?我确实希望FireBug设置会使SQL显示在FireBug中,对吗?是的,就我所记得的。Puigcerber,我只是无法在我的Windows 7计算机上获得任何东西来登录我的本地实例。我应该在firebug的什么地方看到这个,在控制台选项卡中?如果它不在那里,我应该去哪里看?要查看sql,是否需要执行类似于Log.Debug($criteria)的操作才能看到任何内容?是的,如果在控制台打开的情况下刷新站点,所有查询都应该打印在那里。@Puigcerber当您说console是命令提示符吗?或者在网页上显示一些窗口?回答得很好,比更改日志设置要好。最后一个查询的唯一问题是它仍然包含占位符,例如“:productId”。这对我的用户帮助很大!我只需要添加一个它似乎无法解释的连接。