2012-03-27 5 views
0

Я получаю в Exeption, как показано ниже:Doctrine2 бросать исключение в Symfony2

[Syntax Error] line 0, col 53: Error: Expected known function, got 'MONTH' 

при попытке выполнить следующий запрос, используя doctrine2 в Symfony2:

SELECT e FROM EntityBundle:Employee e WHERE MONTH(e.dateOfJoining) = 03 order by e.name 

, когда я пытался выполнить аналогичный запрос, как показано ниже:

SELECT * FROM employee e WHERE MONTH(e.date_of_joining) = 03; 

он отлично работал в phpmyadmin. Так может ли кто-нибудь предложить, как я могу реализовать тот же запрос doctrine2 с symfony2?

ответ

2

Попробуйте прочитать эту статью о registering functions with doctrine, но вы не должны ее использовать. Это очень неэффективно для фильтрации на основе выражения в столбце.

Вы можете достичь того же без накладных расходов, делая что-то вроде -

SELECT e.* 
FROM employee e 
WHERE e.dateOfJoining BETWEEN '2012-03-01' AND '2012-03-31' 
ORDER BY e.name 

Этот запрос будет иметь возможность использовать любой применимый индекс по столбцу dateOfJoining.

+0

Гораздо более дб независимые, +1 – halfer

+0

благодаря nnichols, так как я имею дело не с целой датой, а только с извлеченным месяцем с БД MySQL, то ** МЕЖДУ ** трюк выиграл» т работы. –

+1

Его всегда можно заставить работать. Что именно ты пытаешься сделать? – nnichols

0

У меня была такая же проблема с YEAR(). Он не будет реализован в Учении 2.

Решение установить (с помощью Composer) плагин beberlei/DoctrineExtensions

> composer require beberlei/DoctrineExtensions "dev-master" 

Не забудьте добавить функцию, которую нужно в config.yml. Что-то вроде:

> doctrine: 
>  orm: 
>   dql: 
>    string_functions: 
>     MONTH: DoctrineExtensions\Query\Mysql\Month 
Смежные вопросы