Est-il possible d'utiliser l'instruction OR
dans la méthode Doctrine findBy()
? Je sais que le tableau donné est interprété comme case1 AND case2...
Comme ça
$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 pour défendre:
SELECT * FROM `notif` WHERE status=1 OR status=2 OR status=3;
Existe-t-il un moyen d'obtenir tous les cas?
Pour autant que je sache, ce n'est pas une fonctionnalité prise en charge par Doctrine pour utiliser les requêtes IN () avec findby. Vous pouvez faire deux choses:
Implémentez une méthode findByStatus(array $statusTypes)
dans votre classe de référentiel 'notif' (personnalisée). Si vous aimez cette approche, je peux vous donner un exemple.
Convertissez votre findBy comme suit:
$qb = $this->repos['notif']->createQueryBuilder('n');
$data = $qb->where($qb->expr()->in('status', array(1,2,3)))->getQuery()->getResult();
Cela devrait fonctionner soit :)
Tu peux écrire:
$this->repos['notif']->findBy(array('status' => array(1, 2, 3)));
et cela devrait fonctionner aussi.
Je sais que c'est une vieille question. Quoi qu'il en soit, il est possible d'utiliser Criteria
pour les requêtes complexes (dans 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 avez besoin de requêtes plus complexes, comme "moins de" liées avec OR, mais ne pouvez pas utiliser un générateur de requêtes, cela fonctionne également avec cette syntaxe:
->findBy(array(
'$or' => array(
array('foo' => array('$lt' => 1234)),
array('$and' => array(
array('bar' => 45678),
array('baz' => array('$lt' => 89013))
))
)
));
Ou comme solution à votre question:
->findBy(array(
'$or' => array(
array('status' => 1),
array('status' => 2),
array('status' => 3),
)
));