如何使用QueryBuilder在andWhere子句中执行php循环?

时间:2012-09-14 20:38:51

标签: symfony doctrine-orm query-builder

我想在我的FakeRepository.php中使用QueryBuilder执行这种类型的查询(它用于搜索表单,用户可以在其中查看某些框)。

  if (sizeof($p['types']) > 0) {
         $qb->andWhere(  
               foreach ($p['types'] as $type_id) 
                    {'type.id=' .$type_id.' OR ' }
               '1=0');
         }

但我的语法错误但我不知道如何解决它:

Parse error: syntax error, unexpected T_FOREACH, expecting ')' in /MyBundle/Entity/FakeRepository.php 

非常感谢你的帮助

2 个答案:

答案 0 :(得分:0)

您还可以解决此问题:

$arr = array();
foreach ($p['types'] as $type_id){
    $arr[] = $qb->expr()->orX("type.id = $type_id");
}
$qb->andWhere(join(' OR ', $arr));

答案 1 :(得分:0)

另一种保留QueryBuilder功能的解决方案

$orX = $qb->expr()->orX();

foreach ($types as $key => $type) {
        $orX->add($qb->expr()->eq('types', ':types'.$key));
        $qb->setParameter('types'.$key, $type->getId());
    }

$qb->andWhere($orX);