Yii CDbCriteria将2个属性与单个值进行比较

时间:2013-11-08 10:05:09

标签: php sql database yii

您好我是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,
        ),
    ));
}

1 个答案:

答案 0 :(得分: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;