2013-10-30 53 views
0

我有我已經準備將其傳遞到查詢條件的數組:語義錯誤將數組傳遞給查詢時

陣列:

('u.registered = 1','u.active = 0', 'u.gender = M') 

當我傳遞到查詢時,它與數字比較一起工作,但與varchar不同,它是M.這個錯誤出現在「性別」中,它表示這是一個語義錯誤。我假設是因爲我沒有使用expr() - >文字('M'),但我不能這樣做,因爲查詢是「已經建好」的。

有沒有其他方法,不得不重新編碼?

這是代碼:

public function customR($data){ 
    // var_dump($data);die(); 
    $this->qb = $this->em->createQueryBuilder(); 
    $andX = $this->qb->expr()->andX(); 

    $this->qb->select('u') 
    ->from('models\User','u'); 

    foreach ($data as $value){ 
     $andX->add($value); 

      } 

    $this->qb->add('where', $andX); 


    $query = $this->qb->getQuery(); 
    // var_dump($query);die(); 
    $obj = $query->getResult(); 
    var_dump($obj);die(); 
      if (!empty($obj)){ 
     return $obj; 

     return false; 
    } 
} 
+0

你是什麼意思'已經built'?你的意思是'$ data'變量就是這樣來的,你不能改變它? –

+0

沒錯。我在php中「建立」條件,然後只是將字符串數組傳遞給查詢。這是一個簡單的解決方案,但它不起作用,當我必須與一個varchar比較,在這種情況下,如「M」 – Limon

+0

這是你在建立條件時應該處理的事情。之後,它已經很晚了,你必須解析條件。 –

回答

0

我發現沒有辦法做到這一點,所以我就改了一點點。

我發送一個包含一些元素的數組,只是爲了引用什麼存在以及什麼不存在。

所以,在我的數據服務我創建了一個函數和函數的代碼段solutionate我的問題是這樣做:

if($key == 'gender'){ 
    foreach($value as $key=>&$v){ 
    $condition = ('u.gender = '. $this->qb->expr()->literal($v)); 
    $orX->add($condition); 
      } 
     }