Yii的activeRecord model里有一个search方法,可以用来搜索 数据,但是今天在搜索时,发现会用关联表的字段来搜索数据,查找资料,找到了解决方法
比如article表与user表有关联,需要在本表中用user.nickname字段来搜索数据
//在model里先定义一个搜索字段
public $nickname_search;
//定义关联规则
public function relation(){
return array(
'users' => array(
self::BELONGS_TO,
'User',
'user_id'
)
);
}
//定义搜索方法
public function search(){
$criteria = new CDbCriteria;
$criteria->with = array( 'users' );
$criteria->compare( 'users.nickname', $this->nickname_search, true );
return new CActiveDataProvider($this, array(
'criteria' => $criteria
));
}
//在actionIndex里可以如此使用搜索
public function actionIndex(){
$model=Article::model();
if(isset($_GET['nickname']){
$modle->nickname_search=$_GET['nickname'];
$dataProvider=$model->search();
}else{
$dataProvider=new CActiveDataProvider($model->with('users'));
}
$this->render('index',array(
'dataProvider'=>$dataProvider,
));
}