2013-07-07 8 views
6

In meinem Modell auszuführen ODER-Bedingung:In ZF2 wie in WHERE-Klausel

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

Es führt die folgende Abfrage:

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

aber ich möchte, führen Sie die folgende Abfrage:

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

Welche Änderungen muss ich in der Modelldatei vornehmen?

Und bitte schlagen Sie nützliche Blog diesbezüglich. Ich kann dafür keine Antwort in der ZF2-Dokumentation finden.

Antwort

4

Der einfachste Weg, dies zu tun ist mit das explizite OR Stichwort:

$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

Ich habe mehr Erfahrung mit ZF1 als bei ZF 2 so könnte es andere (bessere, einfachere) Lösungen, aber das sollte es tun:

// 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

ein wenig spät, um die Partei, sondern für Gründlichkeit ich dachte, dass ich eine Alternative würde, die für mich ganz gut funktioniert, und eine, die ein wenig einfacher zu implementieren für einige Entwickler sein könnte :

// '$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 .'%'); 
}); 

Nach der Ausführung wird $select Ihre Ergebnismenge halten, fertig zum Durchschleifen.

Hoffe das hilft jemandem! :)