2013-09-27 55 views
0

我想要做的事情似乎很「經典」,但我沒有找到任何例子... 這是一種搜索形式,主要是optionnal參數。Doctrine2:條件條件

這裏是我的代碼:

$obj = $this->getEntityManager() 
     ->createQueryBuilder() 
      ->select("p") 
      ->from("Client") 
     if ($email) { 
      $obj->add('where', $obj->expr()->like('p.email', ':email')); 
     } 
     if ($name) { 
      $obj->add('where', $obj->expr()->like('p.name', ':name')); 
     } 
     if ($firstname) { 
      $obj->add('where', $obj->expr()->like('p.firstname', ':firstname')); 
     } 
     if ($postalCode) { 
      $obj->add('where', $obj->expr()->like('p.postalCode', ':postalCode')); 
     } 

$obj->setParameters(array('email' => $email,'name'=> $name, 'firstname' => $firstname, 'postalCode' => $postalCode)) 
     ->getQuery()->getResult(); 

但是,當然,如果我在null有一些參數:Invalid parameter number: number of bound variables does not match number of tokens

我敢肯定有一個更好的方式來實現這一目標,我只是不找不到它!

回答

2

有一個數組變量名爲$參數,然後if語句的每一個身體內,將其設置

$parameters = array() 
$obj = $this->getEntityManager() 
    ->createQueryBuilder() 
    ->select("p") 
    ->from("Client")... 

if ($email) { 
    $obj->add('where', $obj->expr()->like('p.email', ':email')); 
    $parameters['email'] = $email; 
} 
if ($name) { 
    $obj->add('where', $obj->expr()->like('p.name', ':name')); 
    $parameters['name'] = $name; 
} 
... 

$obj->setParameters($parameters)->getQuery()->getResult(); 
+0

大,不知道爲什麼我沒有去想它。謝謝 ! – Bonswouar