doctrine2 - remove - Doctrine findBy con O condición
find by id doctrine (4)
Hasta donde yo sé, Doctrine no es una característica compatible para usar consultas IN () con findby. Puedes hacer dos cosas:
Implemente un
findByStatus(array $statusTypes)
en su clase de repositorio (personalizado) ''notif''. Si te gusta este enfoque, puedo darte un ejemplo.Convierte tu findBy a lo siguiente:
$qb = $this->repos[''notif'']->createQueryBuilder(''n''); $data = $qb->where($qb->expr()->in(''status'', array(1,2,3)))->getQuery()->getResult();
Eso debería funcionar bien :)
¿Es posible utilizar la instrucción OR
en el método Doctrine findBy()
? Sé que la matriz dada se interpreta como case1 AND case2...
Como esta
$this->repos[''notif'']->findBy(array(''status'' => 1, ''status'' => 2, ''status'' => 3);
Representa
SELECT * FROM `notif` WHERE status=1 AND status=2 AND status=3;
Ahora necesito algo que representar:
SELECT * FROM `notif` WHERE status=1 OR status=2 OR status=3;
¿Hay alguna forma de obtener todos los casos?
Puedes escribir:
$this->repos[''notif'']->findBy(array(''status'' => array(1, 2, 3)));
y eso debería funcionar también
Sé que esta es una vieja pregunta. De todos modos, es posible usar Criteria
para las consultas complejas (al menos en Doctrine 2):
$criteria = new /Doctrine/Common/Collections/Criteria();
$criteria
->orWhere($criteria->expr()->contains(''domains'', ''a''))
->orWhere($criteria->expr()->contains(''domains'', ''b''));
$groups = $em
->getRepository(''Group'')
->matching($criteria);
Si está utilizando MongoDB y necesita consultas más complejas, como "menor que" vinculado junto con OR, pero no puede usar un generador de consultas, esto también funciona con esta sintaxis:
->findBy(array(
''$or'' => array(
array(''foo'' => array(''$lt'' => 1234)),
array(''$and'' => array(
array(''bar'' => 45678),
array(''baz'' => array(''$lt'' => 89013))
))
)
));
O como una solución para su pregunta:
->findBy(array(
''$or'' => array(
array(''status'' => 1),
array(''status'' => 2),
array(''status'' => 3),
)
));