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



我想在FakeDepository.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 

非常感谢您的帮助

您需要首先构造OR条件,然后将其传递给查询生成器

   $first = true;
   $orQuery = '';
   foreach ($p['types'] as $type_id) 
       if ($first) {
           $first = false;
       } else {
           $orQuery .= ' OR ';
       }
       $orQuery .= 'type.id=' .$type_id;
   }
   $qb->andWhere($orQuery);

保持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);

您也可以解决这个问题:

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

相关内容

  • 没有找到相关文章

最新更新