Loops yii数据库查询内部循环
我没有为以下操作取出正确的筛选器。这里的Loops yii数据库查询内部循环,loops,yii,foreach,Loops,Yii,Foreach,我没有为以下操作取出正确的筛选器。这里的$val是一个校验值数组。但是,即使我使用了foreach循环,查询也只对数组的最后一个元素执行。请问,有人能帮我吗 if( isset($_POST['state']) && count($_POST['state']) > 0 ){ foreach($_POST['state'] as $row => $val ){ $criteria = new CDbCriteria; $cri
$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));
谢谢马丁·科马拉。。。。
我找到了解决办法。。。
我只是在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);
谢谢马丁·科马拉。。。。
我找到了解决办法。。。
我只是在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);
这样会更好,可读性更好:
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);
}
这样会更好,可读性更好:
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);
}
如果要覆盖循环中的projects变量,请尝试$projects[]=ProjectModel::model()->findAll($criteria);不要忘记在循环之前初始化它。谢谢Martin Komara…如果要覆盖循环中的projects变量,请尝试$projects[]=ProjectModel::model()->findAll($criteria);不要忘记在循环之前初始化它。谢谢你Martin Komara…我不知道这是否是最好的解决方案。但至少,这个答案解决了我的问题。谢谢分享。我不知道这是否是最好的解决方案。但至少,这个答案解决了我的问题。谢谢分享。