我开始如下:
[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?
答案 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