как использовать условие () и addcondition () для одной и той же модели поиска - PullRequest
2 голосов
/ 05 марта 2012

У меня есть сетка с условием «upload_date = today», но когда я ищу другие даты, она не фильтрует сетку. Вот моя модель:

public function search()
{
    // Warning: Please modify the following code to remove attributes that
    // should not be searched.
    $date=date('Y-m-d');
    $criteria=new CDbCriteria(array('order'=>'upload_date ASC'));
    $criteria->condition = "upload_date='$date' ";
     if(isset($_GET['upload_date']))
           {
           $criteria->addCondition('upload_date = :upload_date','AND'); 
          $criteria->params[':upload_date'] = $this->upload_date;
             }

    $criteria->compare('book_id',$this->book_id);
    $criteria->compare('date_received',$this->date_received,true);
    $criteria->compare('batch',$this->batch,true);
    $criteria->compare('isbn_no',$this->isbn_no,true);
    $criteria->compare('book_title',$this->book_title,true);
    $criteria->compare('auther_name',$this->auther_name,true);
    $criteria->compare('upload_date',$this->upload_date,true);

    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,
        'pagination'=>array(
        'pageSize'=>50
        ),

    ));
}

Я пытаюсь использовать условие и условие добавления в одном поиске. Что я сделал не так в модели выше?

1 Ответ

5 голосов
/ 05 марта 2012

Попробуйте:

public function search()
{
 $criteria=new CDbCriteria(array('order'=>'upload_date ASC'));

 if(isset($_GET['ModelName']['upload_date']))
 {
  $criteria->compare('upload_date',$this->upload_date,true);
  // $criteria->addCondition('upload_date = :upload_date');
  // $criteria->params[':upload_date'] = $this->upload_date;
 }
 else 
 {
  $date=date('Y-m-d');
  $criteria->condition = "upload_date='$date' "; 
 }
  $criteria->compare('book_id',$this->book_id);
  $criteria->compare('date_received',$this->date_received,true);
  $criteria->compare('batch',$this->batch,true);
  $criteria->compare('isbn_no',$this->isbn_no,true);
  $criteria->compare('book_title',$this->book_title,true);
  $criteria->compare('auther_name',$this->auther_name,true);
  $criteria->compare('upload_date',$this->upload_date,true);

  return new CActiveDataProvider($this, array(
     'criteria'=>$criteria,
     'pagination'=>array(
     'pageSize'=>50
     ), 

 ));
}

Вам не нужно addCondition, особенно потому, что вы добавляете условие в тот же столбец.

Редактировать :В своем основном начальном условии вы уже установили upload_date = $date, теперь, если вы добавите к нему условие, скажем, $_GET['ModelName']['upload_date'], предоставленное пользователем в фильтре, ваш фактический запрос БД станет примерно таким: select * from tbl_name where upload_date = 'xxx' and upload_date = 'yyy', здесь xxx = $ dateВы дали, и yyy = дата, предоставленная пользователем.Теперь, если xxx! = Yyy, как запрос вернет какое-либо значение?Это невозможно.

Надеюсь, вы получили это объяснение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...