1

嗨,我是 yii 的新手,我目前正在做一个项目,但我遇到了 CDbCriteria 的问题。

我的目标查询是:

title LIKE '$_GET['search']%' OR description LIKE '$_GET['search']%'

使用 CDbCriteria 比较是否有可能获得类似的结果?

控制器动作:

public function actionClassifieds(){
    $model = new Classifieds('search');
    $model->unsetAttributes();
    if(isset($_GET['category'])){
        if( $_GET['category'] == 0 ){
            $model->classified_category_id = '';
        }else{
            $model->classified_category_id = $_GET['category'];
        }
    }
    if(isset($_GET['search'])){
        $model->title = $_GET['search'];
        $model->description = $_GET['search'];
    }
    $this->render('classifieds',array('model'=>$model));
}

我的模型:

public function search()
{
    // Warning: Please modify the following code to remove attributes that
    // should not be searched.

    $criteria=new CDbCriteria;

    $criteria->compare('classified_category_id',$this->classified_category_id);
    $criteria->compare('title',$this->title,true);
    $criteria->compare('description',$this->description,true);
    $criteria->compare('price',$this->price,true);
    $criteria->compare('timestamp',$this->timestamp);

    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,
        'pagination'=>array(
            'pageSize'=>10,
        ),
    ));
}
4

1 回答 1

9

尝试:

$criteria->condition = "title LIKE :t OR description LIKE :d";
$criteria->params = array(
              ':t' => trim( Yii::app()->request->getParam('search') ).'%', 
              ':d' => trim( Yii::app()->request->getParam('search') ).'%'); 

更好地使用Yii::app()->request->getParam($var_name)

更新

$criteria->compare('classified_category_id',$this->classified_category_id);
$criteria->compare('price',$this->price,true);
$criteria->compare('timestamp',$this->timestamp);

$criteria->addCondition("title LIKE :t OR description LIKE :d");
$criteria->params[':t'] = $this->title;
$criteria->params[':d'] = $this->description;
于 2013-11-08T10:10:28.277 回答