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. Что я должен изменить?
Ответы
Ответ 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.'%');