2012-09-14 49 views
0

我想在我的FakeRepository.php中使用QueryBuilder執行這種類型的查詢(它用於用戶可以檢查某些框的搜索表單)。如何使用QueryBuilder在andWhere子句中執行php循環?

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 

非常感謝您的幫助

回答

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); 
+0

非常感謝! – Reveclair

0

您也可以解決此問題:

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