Расширение моего ORDER BY в Doctrine2

У меня есть таблица, содержащая номера версий, и я хочу прочитать их естественным образом отсортированными.
Это не проблема с необработанным SQL:

SELECT * FROM versions ORDER BY REPLACE(version, '.', '')+0 DESC

Но если я напишу свой запрос в Doctrine2 так:

$qry = $this->createQueryBuilder('v')
  ->select('v')
  ->orderBy("REPLACE(v.version, '.', '')+0", 'DESC');

я получаю только

Неустранимая ошибка: необработанное исключение «Doctrine\ORM\Query\QueryException» с сообщением «[Синтаксическая ошибка] строка 0, столбец 100: Ошибка: ожидаемый конец строки, получено '('' в .......

Кто-нибудь знает, как написать этот запрос для Doctrine2?


person dan-lee    schedule 08.06.2012    source источник


Ответы (1)


После долгих мучений я понял, что мне нужно написать запрос, используя NativeQuery:

$rsm = new \Doctrine\ORM\Query\ResultSetMapping();
// do some result mapping here ....

$query = $this->_em->createNativeQuery("SELECT v.* FROM versions v ORDER BY REPLACE(v.version, '.', '')+0 DESC", $rsm);

$versions = $query->getResult();
person dan-lee    schedule 08.06.2012
comment
В качестве альтернативы вы можете добавить свою собственную REPLACE строковую функцию.docs.doctrine-project.org/projects/doctrine-orm/en/latest/ Вы также можете установить расширения доктрины, чтобы добавить набор предопределенных функций, которые вы можете зарегистрировать в доктрине github.com/beberlei/DoctrineExtensions - person Will B.; 05.12.2017