Подтвердить что ты не робот

ZF2 Как илиWhere()

Я пытаюсь выяснить, как сделать Mysql Select с OR в where clause. По умолчанию все предложения, в которых оператор 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. Что я должен изменить?

4b9b3361

Ответ 1

В ZF2 нет orWhere, но вы можете использовать любую комбинацию объектов Zend\Db\Sql\Predicate. Для ИЛИ используйте 2 предиката в PredicateSet с 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
    ),
    // ...
));

Ответ 2

или облако:

$select->where
    ->like('content','%'.$searchstring.'%')
    ->or
    ->like('title','%'.$searchstring.'%');