在ZF2中,如何在WHERE子句中执行OR条件


In ZF2 how to execute OR condition in WHERE clause

在我的模型中:

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

它执行以下查询:

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

但我想执行以下查询:

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

我必须对模型文件进行哪些更改?

请推荐一些有用的博客。我在ZF2文档中找不到答案。

最简单的方法是使用显式OR关键字:

$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;

派对有点晚了,但为了彻底起见,我想我会提供一个对我来说效果很好的替代方案,对于一些开发人员来说可能更容易实现:

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

运行之后,$select将保存您的结果集,准备循环通过。

希望这能帮助到别人!:)

与ZF 2相比,我对ZF 1有更多的经验,因此可能还有其他(更好、更简单)的解决方案,但这应该能做到:

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