0

我想在我的 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 

非常感谢你的帮助

4

3 回答 3

1

您需要先构建 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);
于 2012-09-14T21:00:01.263 回答
0

你也可以解决这个问题:

$arr = array();
foreach ($p['types'] as $type_id){
    $arr[] = $qb->expr()->orX("type.id = $type_id");
}
$qb->andWhere(join(' OR ', $arr));
于 2016-02-25T11:20:04.043 回答
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);
于 2019-12-30T11:56:42.410 回答