Doctrine2在Symfony2中抛出异常

时间:2012-03-27 11:16:21

标签: mysql symfony doctrine-orm

我开始如下:

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

尝试在symfony2中使用doctrine2执行以下查询时:

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中运行良好。所以任何人都可以建议我如何使用symfony2实现相同的查询doctrine2?

2 个答案:

答案 0 :(得分: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列上使用任何适用的索引。

答案 1 :(得分:0)

我和YEAR()有同样的问题。它没有在Doctrine 2中实现。

解决方案是安装(通过Composer)插件beberlei / DoctrineExtensions

> composer require beberlei/DoctrineExtensions "dev-master"

不要忘记在config.yml中添加所需的功能。类似的东西:

> doctrine:
>     orm:
>         dql:
>             string_functions:
>                 MONTH: DoctrineExtensions\Query\Mysql\Month