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