Activerecord 如何查看CActiveDataProvider mysql查询
如何在搜索时将CActiveDataProvider中的运行时查询作为输出 期望输出如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
从用户名为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";
- 第一种方式(官方方式):
在
config文件中,将这两个参数添加到main.php
中,您可以在页面末尾或浏览器中的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
获取生成的查询,但您的答案不是解决问题,而是获取条件部分。