Я думаю, что столкнулся с ошибкой Doctrine, но мне интересно, сталкивался ли кто-то еще с этим, или, может быть, я упустил что-то глупое:
// in controller
$qb = $this->getDoctrine()->getRepository(Project::class)->createQueryBuilder('p')
->select('p.id')
->addSelect('SUBSTRING(:foo, 1, :pos) AS substrField')
->setParameter('foo', 'foobar')
->setParameter('pos', 3)
;
dump($qb->getQuery()->getResult());
Сгенерированный запрос PDO заканчивается передачей 3
в качестве значения параметра :foo
и "foobar"
в качестве значения параметра :pos
, что приводит к ошибке Oracle Invalid Number
. Если я поменяю значения в методах setParameter
, это сработает:
->setParameter('pos', 'foobar')
->setParameter('foo', 3)
Умышленное переключение значений в моих вызовах setParameter
кажется слишком хакерским, поэтому я использую помощник $qb->expr()->substring()
в качестве обойти, который работает, как ожидалось.
Платформа: Doctrine 2.5.14 с Oracle 12 c База данных (12.2.0.1.0)
Я открыл ошибку в Doctrine ORM, немного подробнее здесь