2012-03-22 13 views
11

where yan tümcesi eklendikten hemen sonra getListQueryBuilder tarafından döndürülen sorgu oluşturucuya dinamik olarak OR ifadeleri eklemeliyim. Bunu yapmanın uygun bir yolunu bulamıyorum, sadece doktrini öğrenmeye başladım.Doctrine2 sorgu oluşturucusunda Chaing orX

Verilen bir sayıyı orX "zincirleme" ve bunları oluşturucuma nasıl ekleyebilirim? (

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

ancak veya X "Yeni İfade \ Orx dönmek aramaları beri çalışmıyor:

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

cevap

20

Sen this solution kontrol edebilirsiniz func_get_args());"

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

VEYA ama hiç $ OR'ler tablosunu kullanıyorsunuz: içten ve dizinin gibi bir şey (dizide (OR1 ya da 2'dir)) ancak ben bunu yapabilirsiniz düşündüm

API baktım ile bitirmek sorun:

$orx = $builder->expr()->orX(); 
$orx->add($builder->expr()->like("t.name", 'my name')); 
$orx->add($builder->expr()->like("t.description", 'desc')); 
$builder->andWhere($orx); 
+7

tam makaleyi okumak istemiyorsanız: $ veya X = $ oluşturucu-> expr() -> veya X(); foreach ($ OR veya $ olarak) { $ orX-> add ($ or); } $ builder-> andWhere ($ orX); –

+1

@LouTerrailloune, cevabın bir parçası haline gelmeli –

+0

Bu benim için hile yaptı! onu işaret için alkış :) – Sharpy35

8

aynı problem üzerinde tökezledi ve denenmiş:

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 */));