2016-02-25 75 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