2016-02-25 30 views
0

我有一個一對多的實體:添加巢OR語句學說2,QueryBuilder的

User -> OrderPerson 

用戶可以擁有多個orderPersons。

OrderPerson已鏈接到訂單,並且可以有多個訂單。

我想要做的是建立一個動態查詢,以解決這個問題,這是我迄今:

public function getPaged($page, $count , $orderPersons = null) 
    { 
     $qb = $this->orderRepository->createQueryBuilder('c') 
      ->orderBy('c.id', 'DESC'); 

     if ($orderPersons != null) 
     { 
      foreach ($orderPersons AS $orderPerson) 
      { 
       $qb->where('c.orderPerson='.$orderPerson); *** 
      } 

     } 

     $query = $qb->getQuery(); 

    } 

當我奮力是怎麼寫的行:

$qb->where('c.orderPerson='.$orderPerson); 

我的文檔的閱讀,我想我需要使用這樣的事情,但我不知道:

$qb->andWhere(
    $qb->expr()->orX(
     $qb->expr()->eq('c.orderPerson='.$orderPerson) 
    ) 
); 

然而,我不確定如何將它放入循環中。

回答

1

我對D2文檔的一個大批評是,他們在exprs上花了很多時間,但大多數時候你真的不需要它們。只是使代碼難以閱讀。

話雖如此,你的查詢不需要OR條件,只需要一個IN子句。

// Join the order persons 
$qb->leftJoin(c.orderPersons,'orderPerson'); 

// Need at least one 
if (is_array($orderPersons) && count($orderPersons)) { 
    $qb->andWhere('orderPerson.id IN (:orderPersons)); 
    $qb->setParameter('orderPersons',$orderPersons); 
} 

未經測試當然可能會有語法錯誤,但您應該明白。

+0

謝謝 - 一切工作。 – HappyCoder