2013-07-07 24 views
6

Trong mô hình của tôi:Trong ZF2 làm thế nào để thực hiện HOẶC điều kiện trong mệnh đề WHERE

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

Nó thực hiện các truy vấn sau đây:

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

nhưng tôi muốn thực hiện truy vấn sau đây:

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

Những thay đổi tôi phải thực hiện trong tệp mô hình là gì?

Và vui lòng đề xuất blog hữu ích về vấn đề này. Tôi không thể tìm thấy câu trả lời cho điều này trong Tài liệu ZF2.

Trả lời

4

Cách đơn giản nhất để làm điều đó là sử dụng các rõ ràng OR keyword:

$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

Tôi đã trải nghiệm nhiều hơn với ZF 1 so với ZF 2 để có thể có khác (tốt hơn, đơn giản hơn) các giải pháp, nhưng điều này nên làm như lừa:

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

một chút muộn để đảng, nhưng đối với triệt để tôi nghĩ rằng tôi muốn cung cấp một sự thay thế mà làm việc khá tốt đối với tôi, và một trong đó có thể là một chút dễ dàng hơn để thực hiện đối với một số nhà phát triển :

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

Sau khi chạy điều đó, $select sẽ giữ bộ kết quả của bạn, sẵn sàng lặp lại.

Hy vọng điều này sẽ giúp ai đó! :)

Các vấn đề liên quan