我想弄清楚如何在 where 子句中使用 OR 进行 Mysql Select.默认情况下,where 语句中的所有子句都是 AND 运算的,经过几个小时的尝试和失败,查看网络无法使其工作.在 ZF1 中它将是 orWhere() 但在 ZF2 中没有.
I am trying to figure out how to make a Mysql Select with an OR in where Clause. By default all clauses in where statement are ANDed and after some hours of try and fail and looking the net can't make it work. In ZF1 it would be an orWhere() but there is not in ZF2.
这是我在 AbstracttableGateway
中的代码:
This is the code i have inside a AbstracttableGateway
:
$resultSet = $this->select(function (Select $select) use ($searchstring) {
$select->join('users','blog_posts.id_user = users.id',array('name'))
->join('blog_categories','blog_posts.id_category = blog_categories.id', array(
'cat_name' => 'name',
'cat_alias' => 'alias',
'cat_image' => 'icon'))
->order('date DESC');
//->where("title LIKE '%" .$searchstring . "%' OR content LIKE '%". $searchstring ."%'")
$select->where->like('content','%'.$searchstring.'%');
$select->where->like('title','%'.$searchstring.'%');
}
);
return $resultSet;
带有 $select->where->like
的行是 AND 运算的,我希望它们带有 OR.我应该改变什么?
the lines with the $select->where->like
are the ones that are ANDed and I want them with OR. What should I change?
ZF2 中没有 orWhere
,但你可以使用 ZendDbSqlPredicate
的任意组合代码>对象.对于 OR,在 PredicateSet
和 PredicateSet::COMBINED_BY_OR
中使用 2 个谓词.
There is no orWhere
in ZF2, but you could use any combination of ZendDbSqlPredicate
objects. For OR use 2 predicates in a PredicateSet
with PredicateSet::COMBINED_BY_OR
.
关于它的文档不多,但您可以浏览源代码 - 现在.
There's not much documentation for it, but you could browse the source - for now.
编辑:示例
use ZendDbSqlPredicate;
$select->where(array(
// ...
new PredicatePredicateSet(
array(
new PredicateLike('content', '%'.$searchstring.'%'),
new PredicateLike('title', '%'.$searchstring.'%'),
),
PredicatePredicateSet::COMBINED_BY_OR
),
// ...
));
这篇关于ZF2 如何 orWhere()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!