我有一对多的实体:
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)
)
);
但我不确定如何将其置于循环中。
答案 0 :(得分: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);
}
当然未经测试,因此可能存在语法错误,但您应该明白这一点。