yii数据库查询内部循环

时间:2013-09-24 11:38:13

标签: loops yii foreach

我没有为以下操作获取正确的过滤器。这里$val是一个选中值的数组。但是,即使我使用了foreach循环,查询也仅针对数组的最后一个元素执行。拜托,有人可以帮助我吗?

 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));

2 个答案:

答案 0 :(得分:1)

感谢Martin Komara .... 我得到了解决方案...... 我只是在SQL中使用OR条件。

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);     

答案 1 :(得分: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);     
}