3

由于 zf2, orWhere 在 Zend\Db 的查询中不再可能,我在这里发现(ZF2 How to orWhere())可以替换它。在我的示例中,没有“喜欢”,只有如下查询:

$select->where("....")->orWhere("...")

如果使用 PredicateSet 是唯一的方法,我该如何使用它来进行查询?

4

4 回答 4

5

最简单的方法是使用流利的表示法:

$where = new Zend\Db\Sql\Where;
$where->OR->equalTo('id', $id);

如有疑问,请查看 Ralph 在他的 Zend_Db-Examples 存储库 ( https://github.com/ralphschindler/Zend_Db-Examples ) 中发布的示例。

于 2012-11-20T15:04:24.103 回答
3

orPredicate可以用于Where() ,如下所示

public function fetchLike($keyword)
{
    $where = new \Zend\Db\Sql\Where();
    $pred_url      = new \Zend\Db\Sql\Predicate\Like('url', '%' . $keyword . '%');
    $pred_notes    = new \Zend\Db\Sql\Predicate\Like('notes', '%' . $keyword . '%');
    $pred_username = new \Zend\Db\Sql\Predicate\Like('username', '%' . $keyword . '%');
    $where->orPredicate($pred_url)->orPredicate($pred_notes)->orPredicate($pred_username);

    $resultSet = $this->tableGateway->select($where);

    return $resultSet;
}

当然,您可以使用lessThanOrEqualToequalTo等谓词来代替我使用的那种谓词。您也可以使用andPredicate代替orPredicate

单击此处获取 ZF2 关于谓词的信息

此外,最好以适当的方式使用命名空间;

use \Zend\Db\Sql\Predicate\Like;
use \Zend\Db\Sql\Where;
// Now you can use code like this:
$pred_url      = new Like('url', '%' . $keyword . '%');
// Instead of
$pred_url      = new \Zend\Db\Sql\Predicate\Like('url', '%' . $keyword . '%');
于 2013-05-02T12:40:27.503 回答
0

现在称为orPredicate()See code insideZend\Db\Sql\Predicate\Predicate.php

另请参阅Zend\Db\Sql\Select关于where()函数的文档,您可以传递第二个参数来定义ANDOR

于 2012-11-19T17:42:59.787 回答
0

对于您的示例,如果您不使用 LIKE,则可以按如下方式进行(我自己正在寻找解决方案):

    $select->where(
        array(
            new \Zend\Db\Sql\Predicate\PredicateSet(array(
                new \Zend\Db\Sql\Predicate\Operator('first_column', \Zend\Db\Sql\Predicate\Operator::OPERATOR_EQUAL_TO, $some_value),
                new \Zend\Db\Sql\Predicate\Operator('second_column', \Zend\Db\Sql\Predicate\Operator::OPERATOR_EQUAL_TO, $some_value)
                /* even more columns to compare this way... */
            ), 
            \Zend\Db\Sql\Predicate\PredicateSet::COMBINED_BY_OR)
        )
    );
于 2015-10-02T18:48:11.187 回答