Как использовать оператор in в DQL в Doctrine 2.0

У меня есть следующий запрос, который использует оператор 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 не возвращает никаких результатов, я думаю, это из-за чего-то неправильного в преобразовании, которое Doctrine делает для переданного параметра $ids, который является массивом.

Как заставить это работать?


person user760868    schedule 19.05.2011    source источник


Ответы (4)


Попробуйте передать сам массив в ->setParameter(...) вместо того, чтобы сжимать его в строку.

person Jeremy Hicks    schedule 19.05.2011
comment
Спасибо, Джереми, у меня была такая же проблема, и ->setParameter('ids', $ids) работает. - person Matthieu; 15.03.2012
comment
Спасибо, именно то, что мне было нужно - person Daniel Miladinov; 09.04.2013

Я решил это:

$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();
person Fernando León    schedule 21.01.2018
comment
Если вам нужно несколько параметров: $query-›setParameters(array('ids' => $locsIds, 'munIds' => $munIds)); и запрос будет выглядеть так: ..... ГДЕ cl.locationId НЕ В (:ids) И mu.id НЕ В (:munIds) - person Fernando León; 21.01.2018

Я использовал это (setParameter, похоже, не работал у меня):

$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/

person timhc22    schedule 06.03.2014

Я тоже борюсь с оператором IN, используя конструкцию $query->expr()->in()...

Пытаться:

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

Я думаю, что простые кавычки вокруг ваших параметров в части IN() необходимы...

person PeerGum    schedule 16.03.2014