Doctrine findBy avec ou condition
Est-il possible d'utiliser OR
énoncé de Doctrine findBy()
méthode?
Je sais que le tableau donné est interprété comme case1 AND case2...
Comme ceci
$this->repos['notif']->findBy(array('status' => 1, 'status' => 2, 'status' => 3);
représente
SELECT * FROM `notif` WHERE status=1 AND status=2 AND status=3;
Maintenant j'ai besoin de quelque chose à se tenir pour:
SELECT * FROM `notif` WHERE status=1 OR status=2 OR status=3;
Est-il possible d'obtenir tous les cas?
4 réponses
pour autant que je sache, ce n'est pas une fonctionnalité supportée par Doctrine à utiliser dans les requêtes() avec findby. Vous pourriez faire deux choses:
implémenter un
findByStatus(array $statusTypes)
méthode dans votre classe de dépôt 'notif' (personnalisée). Si vous aimez cette approche, je peux vous donner un exemple.Convertissez votre findBy en:
$qb = $this->repos['notif']->createQueryBuilder('n'); $data = $qb->where($qb->expr()->in('status', array(1,2,3)))->getQuery()->getResult();
cela devrait fonctionner :)
Vous pouvez écrire:
$this->repos['notif']->findBy(array('status' => array(1, 2, 3)));
et ça devrait fonctionner aussi.
je sais que c'est une vieille question. De toute façon, il est possible d'utiliser Criteria
pour les requêtes complexes (dans la Doctrine 2 au moins):
$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 vous utilisez MongoDB et ont besoin de plus de requêtes complexes, comme des "moins que" liés à OU de, mais ne peut pas utiliser un générateur de requêtes, cela fonctionne aussi avec cette syntaxe:
->findBy(array(
'$or' => array(
array('foo' => array('$lt' => 1234)),
array('$and' => array(
array('bar' => 45678),
array('baz' => array('$lt' => 89013))
))
)
));
->findBy(array(
'$or' => array(
array('status' => 1),
array('status' => 2),
array('status' => 3),
)
));