2010-08-21 12 views
9

hanno query di Zend:Zend-quadro DB: O invece di operatore

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

In altre parole sembra che:

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

Se devo coppia e frasi, Zend collegarlo tramite Operatore AND. Come posso collegarlo con l'operatore OR? Causa che ho bisogno:

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

Il vostro aiuto sarebbe apprezzato.

+0

Penso che solo sql .. la precedenza degli operatori verrà presa in considerazione, perché queste query saranno convertite in plain sql. Sto solo suggerendo che anch'io ho questo dubbio e sono venuto qui –

risposta

24
$this->_table->select()->orWhere($condition); 

Per costruire più query complexe (I.G. sub-condizioni) potrebbe essere necessario utilizzare $this->table->getAdapter()->quoteInto() e scrivere il selezionati manualmente. (? Più)

1

ho implementato la query Zend

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

Le altre risposte qui non funzionano, la soluzione attuale è quella di chiamare nido() e unnest() nella clausola WHERE:

$select->where 
    ->nest() 
     ->equalTo('column1', 1) 
     ->or 
     ->equalTo('column2', 2) 
    ->unnest() 
    ->and 
    ->equalTo('column3', 3);