Zend 2:谓词和'('&')'

时间:2016-01-28 15:05:28

标签: zend-framework

我想添加括号我的请求,但我不知道如何。你能救我吗?

我的SQL查询:

SELECT * 
FROM vw_my_asn_header 
WHERE username = 'toto' 
  AND (shipment_number LIKE '20151106052811' OR 
       shipment_number LIKE '20151110053250' OR 
       shipment_number LIKE '20151116054359') 
ORDER BY message_id ASC

我的查询:

public function searchSitesDeliveries($username, Search $search)
{
    $select = $this->tableGateway->getSql()->select();
    array(new Predicate\Expression('username = ?', $username)),Predicate\PredicateSet::COMBINED_BY_AND);

    if (!empty($search->get_shipment_number()))
    {
        $valeur = $search->get_shipment_number();

        if(is_array($valeur)) {
           $valeur = array_unique($valeur);

           foreach ($valeur as $key => $value) {
               $predicate_set->orPredicate(new Predicate\Like('shipment_number', '%'.$value.'%'));
           }
        }
        else {
           $predicate_set->andPredicate(new Predicate\Like('shipment_number', '%'.$valeur.'%'));
        }
    }

    $select->where($predicate_set);
    $resultSet = $this->tableGateway->selectWith($select);

    return $resultSet;
}

它缺少用户名和apès之间的括号以及where子句的结尾。

["queryString"] => string(181) "SELECT vw_my_asn_header FROM vw_my_asn_header WHERE (username = :where1 AND shipment_number LIKE :where2 OR shipment_number LIKE :where3 OR shipment_number LIKE :where4)"

如何添加它们?

1 个答案:

答案 0 :(得分:0)

尝试在循环周围使用方法nest()和unnest():

       $predicate_set->nest();
       foreach ($valeur as $key => $value) {
           $predicate_set->orPredicate(new Predicate\Like('shipment_number', '%'.$value.'%'));
       }
       $predicate_set->unnest();