2012-11-18 73 views
0

問題:CDbCriteria打印出錯誤的結果。yii:CDbCriteria打印出錯結果

這是模型搜索功能。

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

     $criteria=new CDbCriteria; 
     $criteria->select = 't.*'; 

     if (Yii::app()->user->checkAccess('Reviewer')): 
      $criteria->addSearchCondition('t.reviewers',Yii::app()->user->id,false, 'AND'); 
     endif; 

     if (Yii::app()->user->checkAccess('Implementer')): 
      $criteria->addSearchCondition('t.implementers',Yii::app()->user->id,false, 'OR'); 
     endif; 

     if (Yii::app()->user->checkAccess('Creator')): 
      $criteria->compare('t.creator',Yii::app()->user->id, false, 'OR'); 
     endif; 

     $criteria->compare('request_type_id',$this->request_type_id); 
     $criteria->compare('request_category_id',$this->request_category_id); 
     $criteria->compare('financial_type_id',$this->financial_type_id); 
     $criteria->compare('urgency_id',$this->urgency_id); 
     $criteria->compare('eta_date',$this->eta_date,true); 

     if (Yii::app()->user->checkAccess('Reviewer') || Yii::app()->user->checkAccess('Implementer')): 
      $criteria->join = "JOIN profiles p ON (p.user_id = t.creator)"; 
      if($this->creator): 
       $criteria->addSearchCondition('p.firstname',$this->creator, true, 'AND'); 
      endif; 
     endif; 

     if(isset($this->status)): 
      $criteria->compare('t.status',$this->status); 
     endif; 



     $data = new CActiveDataProvider(get_class($this), array(
       'criteria'=>$criteria, 
       'pagination'=>false, 
     )); 
     $_SESSION['all'] = $data; 


     $data = new CActiveDataProvider(get_class($this), array(
       'pagination'=>array('pageSize'=> Yii::app()->user->getState('pageSize', 
         Yii::app()->params['defaultPageSize']),), 
       'criteria'=>$criteria, 
     )); 
     $_SESSION['limited'] = $data; 

     return $data; 
    } 

上面的代碼打印出來的查詢時,我跟蹤與CWebLogRoute但沒有記錄。

SQL查詢:SELECT噸* FROM requestt JOIN型材P的 (p.user_id = t.creator)WHERE t.reviewers LIKE:ycp1 LIMIT 10

當我改變這些查詢到下一個,它打印出記錄。

SELECT噸。* FROM requestt JOIN型材P的(p.user_id = t.creator)WHERE t.reviewers LIKE '%3%' LIMIT 0,30

我怎樣才能解決這個問題?

回答

1

嘗試改變

$criteria->addSearchCondition('t.reviewers',Yii::app()->user->id,false, 'AND'); 

$criteria->addSearchCondition('t.reviewers',Yii::app()->user->id, true, 'AND'); 

還要檢查格式的reviewers以及它是如何寫下來的記錄:它也許記錄爲 '3', '3',或'3 」。

它必須更新記錄update request set reviewers = trim(reviewers)