2013-07-07 14 views
6

W moim modelu:W ZF2 sposobu wykonania lub stan w WHERE

$rowset = $this->tableGateway->select(array('username' => $identifier)); 
$row = $rowset->current(); 
return $row; 

Wykonuje następujące zapytanie:

SELECT * FROM member WHERE username='<< ENTERED VALUE >>'; 

ale chcę wykonać następujące zapytanie:

SELECT * FROM member WHERE username='<< ENTERED VALUE >>' OR id_customer='<< ENTERED VALUE >>'; 

Jakie zmiany muszę wprowadzić w pliku modelu?

Proszę też zasugerować przydatny blog dotyczący tego. Nie mogę znaleźć odpowiedzi na to w Dokumentacji ZF2.

Odpowiedz

4

Najprostszym sposobem na to jest za pomocą wyraźne OR kluczowe:

$where = new Zend\Db\Sql\Where; 
$where->equalTo('username', $identifier); 
$where->OR->equalTo('id_customer', $customerId); 

$rowset = $this->tableGateway->select($where); 
$row = $rowset->current(); 
return $row; 
2

mam więcej doświadczenia niż 1 ZF ZF 2, więc nie może być inne (lepsze, prostsze) rozwiązań, ale to powinno wystarczyć:

// Manually build the Select object 
$select = $this->tableGateway->getSql()->select(); 

// Create array containing the fields and their expected values 
$conditions = array('username' => 'foo', 'id_customer' => 123); 

// Add these fields to the WHERE clause of the query but place "OR" in between 
$select->where($conditions, \Zend\Db\Sql\Predicate\PredicateSet::OP_OR); 

// Perform the query 
$rowset = $this->tableGateway->selectWith($select); 
3

trochę późno do partii, ale dla dokładności pomyślałem, że stanowić alternatywę, która działała całkiem dobrze dla mnie, a jeden, że może być trochę łatwiejsze do wdrożenia niektórych deweloperów :

// '$gateway' is a Zend\Db\TableGateway\TableGateway object... 
$search_string = 'something'; 
$select = $gateway->select(function($select) use($search_string) { 
    $select->where->OR->like('first_name', '%'. $search_string .'%'); 
    $select->where->OR->like('last_name', '%'. $search_string .'%'); 
}); 

Po uruchomieniu tego, $select będzie trzymać twój zestaw wyników, gotowy do przejścia.

Mam nadzieję, że to pomoże komuś! :)