2013-09-24 67 views
1

我沒有得到正確的過濾器爲下面的行動。這裏$val是一個檢查值的數組。但是查詢只對數組的最後一個元素執行,即使我使用了foreach循環。請幫助我嗎?yii數據庫查詢內循環

if(isset($_POST['state']) && count($_POST['state']) > 0 ){ 
    foreach($_POST['state'] as $row => $val){ 
     $criteria = new CDbCriteria; 
     $criteria->select='*'; 
     $criteria->condition='pjt_user_id=:pjt_user_id && pjt_pdt_status=:pjt_pdt_status'; 
     $criteria->params=array(':pjt_user_id'=> $user_id, ':pjt_pdt_status'=> $val);  
     $criteria -> order = 'pjt_id';   
     $projects= ProjectModel::model() -> findAll($criteria); 



    } 
$this->render('index', array('projects'=>$projects)); 
+0

您將要覆蓋的項目在循環變量,嘗試$項目[] = ProjectModel ::模型() - >的findAll($標準);不要忘記在循環之前初始化它。 –

+0

謝謝你Martin Komara ... –

回答

0

這會更好 - 更可讀:

if (isset($_POST['state']) && count($_POST['state']) > 0) { 
    $criteria = new CDbCriteria; 
    $criteria->addInCondition('pjt_pdt_status', $_POST['state']); 
    $criteria->addColumnCondition(array('pjt_user_id' => $user_id)); 
    $criteria->order = 'pjt_id'; 
    $projects = ProjectModel::model()->findAll($criteria);  
} 
1

感謝馬丁農產會社.... 我在SQL的解決方案... 我只是使用或使用條件。

if(isset($_POST['state']) && count($_POST['state']) > 0){ 


     $i = 0; 
     foreach($_POST['state'] as $data){ 
      $condit[":$data"] = $data; 
      if($i!=0){ 
       $var .= ' || '; 
      } 
      $var .= " pjt_pdt_status=:$data"; 
      $i++;     
     } 
     $var = ' AND (' .$var.')';  
    } 
    $criteria = new CDbCriteria;  
    $criteria->select='*'; 
    $criteria->condition='pjt_user_id=:pjt_user_id' .$var ; 
    $criteria->params=$condit; 
    $criteria -> order = 'pjt_id';   
    $projects= ProjectModel::model() -> findAll($criteria);  
+0

我不知道這是否是最佳解決方案。但至少,這個答案解決了我的問題。感謝分享。 –