2012-03-22 6 views
11

where句を追加した直後にgetListQueryBuilderが返すクエリービルダーに、OR式を動的に追加する必要があります。私はこれを行う適切な方法を見つけることができません、私はちょうど教義を学び始めています。Doctrine2クエリービルダーのorXを

orXの番号を「チェーン」してビルダーに追加するにはどうすればよいですか?

public function getListQueryBuilder($ownerId) 
{ 
    $qb = $this->createQueryBuilder('t'); 

    return $qb 
     ->where($qb->expr()->eq('t.user', ':user')) 
     ->setParameter('user', $ownerId); 
} 

$builder = getListQueryBuilder(4); 

// $ORs is a dynamically builded array, here is just an example 
$ORs = array(); 
$ORs[] = $builder->expr()->like("t.name", 'my name'); 
$ORs[] = $builder->expr()->like("t.description", 'desc'); 

// Adding ORs to the builder 
$builder->andWhere($builder->expr()->orX(/* here */)); 

答えて

20

あなたはthis solutionをチェックすることができます。

$orX = $builder->expr()->orX(); 
foreach($ORs as $or) { 
    $orX->add($or); 
} 
$builder->andWhere($orX); 
+7

あなたは完全な記事読みたいいけない場合: $ ORX = $ builder-> exprの() - > ORXを(); foreach($ ORは$または) { $ orX-> add($ or); } $ builder-> andWhere($ orX); –

+1

@LouTerrailloune答えの一部になるはずです –

+0

それは私のためのトリックでした!それを指摘するための喝采:) – Sharpy35

8

を私は同じ問題につまずいたとみました:

$builder->andWhere($builder->expr()->orX($ORs)); 

が、ORXは「戻る新しいExprに\ ORX(呼び出しますので、それは動作しません。 func_get_args()); "

$builder->andWhere($builder->expr()->orX()->addMultiple($ORs)); 

ORけど全然$論理和テーブルを使用してください:内部で、あなたは、配列のようなもの(配列(OR 1、OR 2))しかし、私はあなたがこれを行うことができます考え出し

はAPIを見たで終わります問題:

$orx = $builder->expr()->orX(); 
$orx->add($builder->expr()->like("t.name", 'my name')); 
$orx->add($builder->expr()->like("t.description", 'desc')); 
$builder->andWhere($orx); 
関連する問題