如何查看CActiveDataProvider mysql查询

时间:2014-01-14 10:47:21

标签: activerecord yii

如何在搜索时将CActiveDataProvider中的运行时查询作为输出。

期待输出如
select * from user_tbl where username ='xxx'和email='test@in.com';

我怎么能 在我的模型中

public function search() {  

        $criteria=new CDbCriteria;  
        $criteria->compare('username',$this->username,true);
        $criteria->compare('email',$this->email,true);           
        $criteria->compare('country',$this->country,true);          
        $criteria->compare('role',$this->role,true); 
        $criteria->compare('status',$this->status,true); 
        return new CActiveDataProvider($this, array(
            'criteria'=>$criteria,'pagination' => array(
            'pageSize' => 100,
        ),
        ));
    } 

3 个答案:

答案 0 :(得分:2)

您需要在配置文件中激活记录器。请参阅this description

答案 1 :(得分:1)

  • 第一种方式(官方方式):
    main.php配置文件中,在log section中添加这两个参数,您可以在页面末尾看到日志消息,或在浏览器中看到FireBug Console。不要忘记在db部分设置必要的参数。

'components' => array( 'db'=>array( 'enableProfiling'=>true, 'enableParamLogging' => true, ), 'log'=>array( 'class'=>'CLogRouter', 'routes'=>array( array( 'class'=>'CWebLogRoute', 'showInFireBug' => true, ), array( 'class'=>'CProfileLogRoute', 'levels'=>'profile', 'enabled'=>true, ), ), ), );

  • 第二种方式:
    在您的代码中,只需将其中一列的拼写更改为不正确的内容,您将在页面中收到包含完整SQL查询的错误消息。类似这样的事情:
    (我已将country更改为wrong_country,当您刷新页面时,您将看到在您的数据库中执行的生成的SQL)
  
    

$criteria->compare('wrong_country',$this->country,true);

  

以这两种方式,YII_DEBUG

index.php为真
defined('YII_DEBUG') or define('YII_DEBUG',true);

答案 2 :(得分:0)

如您所见,搜索功能返回CActiveDataProvider。 您可以从“criteria”属性中获取SQL的“where”部分:

$prov=$myMod->search();
$cond=$prov->criteria->condition;
$tabName=$myMod->tableName();
$sql="select * from $tabName where $cond";