2012-07-28 24 views
22

que necesito para construir DQL con un QueryBuilder como estopase de condiciones para expr doctrina() -> orx() método

[QUERY]... AND WHERE e.type = x OR e.type = Y OR e.type = N [...] 

Tengo tipos en serie ¿Cómo puedo pasar esta matriz a mi generador de consultas ?

$qb->andWhere($qb->expr()->orx(CONDITIONS)); 

Lista de tipos será dinámica, llamando $qb->andWhere en cada bucle foreach tipos hará que sólo es más ¿Y dónde está hay más RUP.
¿Puedo almacenar expresiones de multiplicar orx y luego agregarlo al andWhere? Alguna idea de cómo resolver este problema, probablemente, común?

Respuesta

5

Sabía que Tommarow será un día mejor. La solución es simple. Su puede hacer gran variedad de o expresiones como tal

$ors[] = $qb->expr()->orx('e.type = '.$qb->expr()->literal($value)); 

Y a continuación, sólo tiene que añadir que con el método del generador de consultas a través de andWhere()/Donde() se unen método de este modo:

$qb->andWhere(join(' OR ', $ors)); 
50

espero que sí, entonces me encontré esto:

$conditions = array('e.type = x', 'e.type = Y', 'e.type = N'); 
$orX = $qb->expr()->orX(); 

foreach ($conditions as $condition) { 
    $orX->add($condition); 
} 

$qb->add('where', $orX); 

Usando @meze sugerencia, puede simplificar el código y reemplazar el foreach declaración con:

$orX->addMultiple($conditions); 
+16

Cada día es mejor que antes, foreach puede ser reemplazada con '$ orX-> addMultiple ($ condiciones); ' – meze

+1

He cambiado la respuesta a la wiki de la comunidad. @meze, puedes editarlo con tus cambios. – DEY

5

@DEY su respuesta puede ser simplificado No hay necesidad para el foreach, esto también funciona:

$conditions = array('e.type = x', 'e.type = Y', 'e.type = N'); 

$orX = $qb->expr()->orX(); 
$orX->addMultiple($conditions); 

$qb->where($orX); 
0

también puede utilizar ... en php como:

$conditions = array('e.type = x', 'e.type = Y', 'e.type = N'); 
$criteria = Criteria::create(); 
$criteria->andWhere(Criteria::expr()->orX(...$conditions)); 
Cuestiones relacionadas