Activerecord 如何查看CActiveDataProvider mysql查询

Activerecord 如何查看CActiveDataProvider mysql查询,activerecord,yii,Activerecord,Yii,如何在搜索时将CActiveDataProvider中的运行时查询作为输出 期望输出如 从用户名为xxx和电子邮件为xxx的用户列表中选择*test@in.com'; 我怎么能 在我的模型中 public function search() { $criteria=new CDbCriteria; $criteria->compare('username',$this->username,true); $criteria-&g

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

期望输出如
从用户名为xxx和电子邮件为xxx的用户列表中选择*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,
        ),
        ));
    } 

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

,如您所见,搜索函数将返回一个CActiveDataProvider。 您可以从“criteria”属性获取SQL的“where”部分:

$prov=$myMod->search();
$cond=$prov->criteria->condition;
$tabName=$myMod->tableName();
$sql="select * from $tabName where $cond";
  • 第一种方式(官方方式):
    main.php
    config文件中,将这两个参数添加到
    log部分
    中,您可以在页面末尾或浏览器中的
    FireBug控制台
    中看到日志消息。不要忘记在
    db
    部分中设置必要的参数
“组件”=>阵列(
'db'=>数组(
“enableProfiling”=>true,
“enableParamLogging”=>true,
),
'log'=>数组(
“类”=>“克隆人”,
“路由”=>数组(
排列(
'class'=>'CWebLogRoute',
'showInFireBug'=>正确,
),
排列(
'class'=>'CProfileLogRoute',
“级别”=>“配置文件”,
“已启用”=>true,
),
),
),
);

  • 第二种方式:
    在您的代码中,只需将其中一列的拼写更改为不正确的内容,您将在页面中收到包含完整SQL查询的错误消息。类似这样:
    (我已将
    国家/地区更改为
    错误的国家/地区
    ,当您刷新页面时,您将看到在数据库中执行的生成的SQL)
$criteria->compare('error_country',$this->country,true)

在这两种方法中,在
index.php

defined('YII_DEBUG') or define('YII_DEBUG',true);

问题是如何在数据库中执行之前从
cactivedaptaprovider
获取生成的查询,但您的答案不是解决问题,而是获取条件部分。