2014-04-11 47 views
0

我使用下面的代碼來構建一個基於GET請求參數的查詢,作爲REST服務:Zend Sql:添加一個新的Where對象到一個Select已經有where子句的對象導致預先存在的where子句被刪除

foreach($params as $key=>$param) { 
    if($key != 'page' && $key != 'pageSize' && $key != 'likeStart' && $key != 'likeEnd') { 
     if(strpos($param, ',') !== false) { 
      $where = new \Zend\Db\Sql\Where(); 

      $predicate_set = $where->nest(); 
      $param_arr = explode(',', $param); 

      $entered_once = 0; 
      foreach($param_arr as $p) { 
       $field = str_replace("_", ".", $key); 
       if(!$like) {  
        $arr[$field]['egal'] = $p; 
        $predicate_set->equalTo($field, $p); 
       } 
       else { 
        $predicate_set->like($field, "%$p%"); 
        $arr[$field]['like'] = $p; 
       } 
       var_dump($predicate_set); 

       if($entered_once < count($param_arr)) { 
        $predicate_set->or; 
       } 
       $entered_once++; 
      } 

      $predicate_set->unnest(); 
      $select->where($where); 
     } 
     else { 
      $field = str_replace("_", ".", $key); 
      if(!$like) { 
       $select->where->equalTo($field, $param); 
       $arr[$field]['egal'] = $param; 
      } 
      else { 
       $select->where->like($field, "%$param%"); 
       $arr[$field]['like'] = $param; 
      } 
     } 
    }  
    else if($key == 'likeStart') {     
     $like = true; 
    } 
    else if($key == 'likeEnd') { 
     $like = false; 
    }  
} 

與它的問題是該行$select->where($where);一切後,我以前在哪裏上的選擇條款(或對象)被替換爲新的謂詞在哪裏了。有沒有辦法將謂詞添加到現有的對象?

回答

1

嗯,實際上在查看Zend文檔時找到了答案。使用$select->where->addPredicate($where)而不是$select->where($where)會導致查詢正確構建。

如果其他人面臨同樣的問題,就要離開這個問題了(上帝知道辦公室裏沒有人知道該怎麼做)