我需要用这样的QueryBuilder
构建DQL
[QUERY]... AND WHERE e.type = x OR e.type = Y OR e.type = N [...]
我在数组中有类型如何将此数组传递给查询构建器?
$qb->andWhere($qb->expr()->orx(CONDITIONS));
类型列表将是动态的,在每个foreach类型循环上调用$qb->andWhere
只会使更多AND AND WHERE不再有OR。
我可以存储多个orx
表达式,然后将其添加到andWhere
吗?任何想法如何解决,可能是常见问题?
答案 0 :(得分:61)
我希望如此,然后我发现了这个:
$conditions = array('e.type = x', 'e.type = Y', 'e.type = N');
$orX = $qb->expr()->orX();
foreach ($conditions as $condition) {
$orX->add($condition);
}
$qb->add('where', $orX);
使用@meze建议,您可以简化代码并将 foreach 语句替换为:
$orX->addMultiple($conditions);
答案 1 :(得分:9)
@DEY他的答案可以简化。 不需要foreach,这也有效:
$conditions = array('e.type = x', 'e.type = Y', 'e.type = N');
$orX = $qb->expr()->orX();
$orX->addMultiple($conditions);
$qb->where($orX);
答案 2 :(得分:8)
我知道tommarow会过得更好。 解决方案很简单。你可以制作像这样的OR表达式
$ors[] = $qb->expr()->orx('e.type = '.$qb->expr()->literal($value));
然后只需通过连接方法将它添加到查询构建器的andWhere()/ Where()方法中,如下所示:
$qb->andWhere(join(' OR ', $ors));
答案 3 :(得分:2)
你也可以在php中使用...
:
$conditions = array('e.type = x', 'e.type = Y', 'e.type = N');
$criteria = Criteria::create();
$criteria->andWhere(Criteria::expr()->orX(...$conditions));
答案 4 :(得分:1)
您还可以使用call_user_func_array函数like this。
它允许您调用将数组项目作为参数传递的方法。