我正在试图弄清楚如何在一个子句中使用OR进行Mysql Select。默认情况下,where语句中的所有子句都是AND,并且经过几个小时的尝试和失败后查看网络无法使其工作。在ZF1中它将是一个orWhere()但是在ZF2中没有。
这是我在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
的行是ANDed的行,我希望它们带有OR。我应该改变什么?
答案 0 :(得分:22)
ZF2中没有orWhere
,但您可以使用Zend\Db\Sql\Predicate
个对象的任意组合。对于OR,使用PredicateSet
PredicateSet::COMBINED_BY_OR
中的2个谓词。
没有太多的文档,但你可以浏览源代码 - 现在。
修改:示例
use Zend\Db\Sql\Predicate;
$select->where(array(
// ...
new Predicate\PredicateSet(
array(
new Predicate\Like('content', '%'.$searchstring.'%'),
new Predicate\Like('title', '%'.$searchstring.'%'),
),
Predicate\PredicateSet::COMBINED_BY_OR
),
// ...
));
答案 1 :(得分:4)
或者你使用云:
$select->where
->like('content','%'.$searchstring.'%')
->or
->like('title','%'.$searchstring.'%');