或者在zf2中消失了。如何更换?

时间:2012-11-19 16:53:46

标签: zend-framework2

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

这样的查询
$select->where("....")->orWhere("...")

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

4 个答案:

答案 0 :(得分:5)

最简单的方法是使用流利的符号:

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

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

答案 1 :(得分: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;
}

当然,您可以使用 lessThanOrEqualTo equalTo 等谓词而不是我使用的类似。您也可以使用 andPredicate 代替或预订

Click here for ZF2's info on predicates

另外,最好以正确的方式使用命名空间;

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 . '%');

答案 2 :(得分:0)

现在称为orPredicate()请参阅Zend\Db\Sql\Predicate\Predicate.php

中的代码

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

答案 3 :(得分: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)
        )
    );