由于zf2,或者在使用Zend \ Db查询时不再可能 我发现这里(ZF2 How to orWhere())可以替换它。 在我的例子中,没有“喜欢”,只有像:
这样的查询$select->where("....")->orWhere("...")
如果使用PredicateSet是唯一的方法,我该如何使用它来进行查询?
答案 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()
功能的文档,您可以传递第二个参数来定义AND
或OR
答案 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)
)
);