2013-09-24 4 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

감사 마틴 Komara .... 나는 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

이것이 최선의 해결책인지 아닌지 모르겠습니다. 하지만 적어도이 대답은 내 문제를 해결했습니다. 공유해 주셔서 감사합니다. –