web-dev-qa-db-fra.com

Comment utiliser l'instruction in dans DQL dans Doctrine 2.0

J'ai la requête suivante qui utilise une instruction IN.

$ids = array(1,2,3);
$query = 'select o from Organisation o where o.id in (:ids)';
$this->_entityManager->createQuery($query)
            ->setParameter('ids', implode(', ', $ids))

Doctrine ne renvoie aucun résultat. Je pense que c'est à cause d'un problème dans la conversion que Doctrine le fait pour le paramètre passé $ids qui est un tableau. 

Comment le faire fonctionner?

26
user760868

Essayez de passer le tableau lui-même à ->setParameter(...) au lieu de l'imploser dans une chaîne.

46
Jeremy Hicks

J'ai résolu ceci:

$con = $this->getEntityManager();
$query = $con->createQuery("SELECT cl
                            FROM BackendBundle:classifieds cl 
                            INNER JOIN BackendBundle:locations lo WITH cl.locationId = lo.id
                            INNER JOIN BackendBundle:municipality mu WITH lo.municipalId = mu.id
                            WHERE cl.verified = false AND mu.id = ".$munId." AND cl.locationId NOT IN (:ids) ");
$query->setParameters(array('ids' => $locsIds));
return $query->getResult();
1
Fernando León

J'ai utilisé ceci (setParameter n'a pas semblé fonctionner pour moi):

$em->createQuery('SELECT users FROM Entities\User users WHERE users.id IN (:ids)')
->setParameters(array('ids' => $ids));

http://redbeardtechnologies.wordpress.com/2011/07/01/doctrine-2-dql-in-statement/

0
timhc22