13

我试图弄清楚如何在 where 子句中使用 OR 来制作 Mysql Select。默认情况下,where 语句中的所有子句都是 ANDed,并且经过几个小时的尝试和失败,并且查看网络无法使其工作。在 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。我应该改变什么?

4

2 回答 2

22

ZF2中没有orWhere,但您可以使用任何Zend\Db\Sql\Predicate对象组合。PredicateSet对于 OR,在with中使用 2 个谓词PredicateSet::COMBINED_BY_OR

它的文档不多,但您可以浏览源代码 - 现在。

编辑:示例

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
    ),
    // ...
));
于 2012-10-24T20:29:30.133 回答
5

或者你云使用:

$select->where
    ->like('content','%'.$searchstring.'%')
    ->or
    ->like('title','%'.$searchstring.'%');
于 2012-10-29T23:26:32.383 回答