Zend framework Zend Sql:将新的Where对象添加到已具有Where子句的Select对象会导致删除预先存在的Where子句

Zend framework Zend Sql:将新的Where对象添加到已具有Where子句的Select对象会导致删除预先存在的Where子句,zend-framework,zend-framework2,Zend Framework,Zend Framework2,作为REST服务的一部分,我使用以下代码基于GET请求参数构建查询: foreach($params as $key=>$param) { if($key != 'page' && $key != 'pageSize' && $key != 'likeStart' && $key != 'likeEnd') { if(strpos($param, ',') !== false) { $where

作为REST服务的一部分,我使用以下代码基于GET请求参数构建查询:

foreach($params as $key=>$param) {
    if($key != 'page' && $key != 'pageSize' && $key != 'likeStart' && $key != 'likeEnd') {
        if(strpos($param, ',') !== false) {
            $where = new \Zend\Db\Sql\Where();

            $predicate_set = $where->nest();
            $param_arr = explode(',', $param);

            $entered_once = 0;
            foreach($param_arr as $p) {
                $field = str_replace("_", ".", $key);
                if(!$like) {       
                    $arr[$field]['egal'] = $p;
                    $predicate_set->equalTo($field, $p);
                }
                else {
                    $predicate_set->like($field, "%$p%");
                    $arr[$field]['like'] = $p;
                }
                var_dump($predicate_set);

                if($entered_once < count($param_arr)) {
                    $predicate_set->or;
                }
                $entered_once++;
            }

            $predicate_set->unnest();
            $select->where($where);
        }
        else {
            $field = str_replace("_", ".", $key);
            if(!$like) {
                $select->where->equalTo($field, $param);
                $arr[$field]['egal'] = $param;
            }
            else {
                $select->where->like($field, "%$param%");
                $arr[$field]['like'] = $param;
            }
        }
    }    
    else if($key == 'likeStart') {                  
        $like = true;
    }   
    else if($key == 'likeEnd') {
        $like = false;
    }       
}
foreach($params作为$key=>$param){
如果($key!='page'&&$key!='pageSize'&&$key!='likeStart'&&$key!='likeendd'){
if(strpos($param,,')!==false){
$where=new\Zend\Db\Sql\where();
$predicate_set=$where->nest();
$param_arr=分解(',',$param);
$entered_once=0;
foreach($p){
$field=str\u replace(“\u”,”,$key);
如果(!$like){
$arr[$field]['egal']=$p;
$predicate_set->equalTo($field,$p);
}
否则{
$predicate_set->like($field,“%$p%”);
$arr[$field]['like']=$p;
}
变量转储($predicate\u set);
如果($entered_onceor;
}
$entered_once++;
}
$predicate_set->unnest();
$select->where($where);
}
否则{
$field=str\u replace(“\u”,”,$key);
如果(!$like){
$select->where->equalTo($field,$param);
$arr[$field]['egal']=$param;
}
否则{
$select->where->like($field,“%$param%”);
$arr[$field]['like']=$param;
}
}
}    
如果($key=='likeStart'){
$like=true;
}   
如果($key=='likeEnd',则为else){
$like=false;
}       
}

它的问题是在
$select->where($where)行之后我以前在select上的Where子句(或对象)中的所有内容都被替换为新的Where谓词。有没有办法将谓词添加到现有对象中?

Hm,在查看Zend文档时找到了答案。使用
$select->where->addPredicate($where)
而不是
$select->where($where)
可以正确生成查询

如果其他人也面临同样的问题,我会把这个问题留待考虑(天知道办公室里没有人知道怎么做)