Zend framework 如何使用Zend\Db\Sql组件以编程方式创建嵌套的where子句?

Zend framework 如何使用Zend\Db\Sql组件以编程方式创建嵌套的where子句?,zend-framework,Zend Framework,我尝试使用以下代码来完成它,但unnest函数返回一个错误: foreach($params as $key=>$param) { if(strpos($param, ',') !== false) { $where = new \Zend\Db\Sql\Where(); $where->nest(); $param_arr = explode(',', $param); $entered_once = 0;

我尝试使用以下代码来完成它,但unnest函数返回一个错误:

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

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

        $entered_once = 0;
        foreach($param_arr as $p) {
            $where->equalTo($key, $p);
            if($entered_once < count($param_arr)) {
                $where->or;
            }
            $entered_once++;
        }
        $where->unnest();
        $select->where($where);
    }
    else {
        $select->where(array($key => $param));
    }
}   

我已经知道我做错了什么:我没有意识到nest函数返回了一个全新的谓词集,而这正是我需要调用所有函数的地方。解决办法如下:

foreach($params as $key=>$param) {
    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) {
            $predicate_set->equalTo($key, $p);
            if($entered_once < count($param_arr)) {
                $predicate_set->or;
            }
            $entered_once++;
        }

        $predicate_set->unnest();
        $select->where($where);
    }
    else {
        $select->where(array($key => $param));
    }
}