如何在搜索时将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,
),
));
}
答案 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,
),
),
),
);
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";