Zend-framework DB: ИЛИ вместо оператора И - PullRequest
10 голосов
/ 21 августа 2010

есть такой Zend-запрос:

$select = $this->_table
               ->select()
               ->where('title LIKE  ?', '%'.$searchWord.'%')
               ->where('description LIKE  ?', '%'.$searchWord.'%')
               ->where('verified=1 AND activated=1');

Другими словами это выглядит так:

SELECT `some_table`.* FROM `some_table` WHERE (title LIKE '%nice house%') AND (description LIKE '%nice house%') AND (verified=1 AND activated=1)

Если у меня есть пара предложений AND, Zend соединяет их через оператор AND. Как я могу связать это с оператором ИЛИ? Потому что мне нужно:

...(title LIKE '%nice house%') OR (description LIKE '%nice house%')...

Ваша помощь будет оценена.

Ответы [ 3 ]

25 голосов
/ 21 августа 2010
$this->_table->select()->orWhere($condition);

Для построения более сложных запросов (например, подусловий) вам, возможно, придется использовать $this->table->getAdapter()->quoteInto() и написать свой SELECT вручную.

3 голосов
/ 28 мая 2016

Другие ответы здесь не работают (больше?), Текущим решением является вызов nest () и unnest () в предложении where:

$select->where
    ->nest()
        ->equalTo('column1', 1)
        ->or
        ->equalTo('column2', 2)
    ->unnest()
    ->and
    ->equalTo('column3', 3);
1 голос
/ 31 января 2014

Я выполнил ваш Zend-запрос

$select = $this->_table
               ->select()
               ->where('title LIKE  ?', '%'.$searchWord.'%')
               ->ORwhere('description LIKE  ?', '%'.$searchWord.'%')
               ->where('verified=1 AND activated=1');
...