Select Zend Framework 2选择或

Select Zend Framework 2选择或,select,zend-framework2,where,Select,Zend Framework2,Where,有人看到这个问题吗 我试图使用谓词来比较语句中的整数,该语句应该如下所示 SELECT * FROM `table` WHERE (cat1=1 OR cat1=2 OR cat2 = 1 OR cat2 = 2); 这就是我所拥有的 $resultSet = $this->select(function (Select $select) { $where = new \Zend\Db\Sql\Where(); $pred_1 = new \Zend\D

有人看到这个问题吗

我试图使用谓词来比较语句中的整数,该语句应该如下所示

SELECT * FROM `table` WHERE (cat1=1 OR cat1=2 OR cat2 = 1 OR cat2 = 2);
这就是我所拥有的

$resultSet = $this->select(function (Select $select) {

        $where = new \Zend\Db\Sql\Where();
        $pred_1 = new \Zend\Db\Sql\Predicate\Like('cat1', 1);
        $pred_2 = new \Zend\Db\Sql\Predicate\Like('cat1', 2);
        $pred_3 = new \Zend\Db\Sql\Predicate\Like('cat2', 1);
        $pred_4 = new \Zend\Db\Sql\Predicate\Like('cat1', 2);
        $where->orPredicate($pred_1)->orPredicate($pred_2)->orPredicate($pred_3)->orPredicate($pred_4);

});

resultSet
是一个对象,但它返回表中的所有结果,不进行筛选

查看文档,您将找到所需的一切

Zend将为您完成大部分工作,您只需要提供一个数组

$resultSet = $this->select(function (Select $select) {

    $select->where(array(
        'cat1 = 1', 'cat1 = 2', 'cat2 = 1', 'cat2 = 2'
    ), \Zend\Db\Sql\Predicate\PredicateSet::OP_OR);
});

\Zend\Db\Sql\Predicate\PredicateSet::OP\u或
是您案例中的重要部分。

$pred\u 4=new\Zend\Db\Sql\Predicate\Like('cat1',2)行具有cat1而不是cat2。这可能是个问题吗?您不需要以某种方式将
$where
连接到
$select
?比如
$select->where->orPredicate(…)
$resultSet = $this->select(function (Select $select) {

        $where = new \Zend\Db\Sql\Where();
        $pred_1 = new \Zend\Db\Sql\Predicate\Like('cat1', 1);
        $pred_2 = new \Zend\Db\Sql\Predicate\Like('cat1', 2);
        $pred_3 = new \Zend\Db\Sql\Predicate\Like('cat2', 1);
        $pred_4 = new \Zend\Db\Sql\Predicate\Like('cat1', 2);
        $where
           ->orPredicate($pred_1)
           ->orPredicate($pred_2)
           ->orPredicate($pred_3)
           ->orPredicate($pred_4)
       ;
       $select->where($where); // attach to the select object.
});