Ответ 1
Попробуйте передать сам массив ->setParameter(...)
вместо того, чтобы вставить его в строку.
У меня есть следующий запрос, который использует инструкцию 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
, который является массивом.
Как заставить его работать?
Попробуйте передать сам массив ->setParameter(...)
вместо того, чтобы вставить его в строку.
Я использовал это (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/
Я тоже борюсь с инструкцией IN, используя конструкцию $query- > expr() → in()...
Try:
$em->createQuery("SELECT users FROM Entities\User users WHERE users.id IN (':ids')")
->setParameters(array(‘ids’ => $ids));
Я думаю, что простые цитаты вокруг ваших параметров в части IN() необходимы...