tag name php oop doctrine2 doctrine dql

php - name - pasar el conjunto de condiciones a la doctrina expr()-> método orx()



get tag name wordpress (5)

@DEY su respuesta puede ser simplificada. No hay necesidad de foreach, esto también funciona:

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

Necesito construir DQL con un QueryBuilder como este

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

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

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

La lista de tipos será dinámica, llamando a $qb->andWhere En cada bucle de tipos foreach solo habrá más Y DONDE no habrá más OR.
¿Puedo almacenar expresiones orx multiplicadas y luego agregarlas a andWhere ? ¿Alguna idea de cómo resolver este problema, probablemente, común?


Espero que sí, entonces 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 la sugerencia de @meze, puede simplificar el código y reemplazar la instrucción foreach con:

$orX->addMultiple($conditions);


Sabía que mañana sería un día mejor. La solución es simple. Tu puedes hacer matrices de expresiones OR asi

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

Y luego simplemente agréguelo al método andWhere () / Where () del generador de consultas a través del método de unión de esta manera:

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


También puede utilizar la función call_user_func_array esta manera .

Te permite llamar a un método que pasa los elementos de una matriz como parámetros.


También puedes usar ... en php como:

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