Php 年份函数在Symfony 2中不起作用

Php 年份函数在Symfony 2中不起作用,php,symfony,Php,Symfony,无法在symfony 2原则中使用YEAR()。下面给出了我的代码 $users = $this->getEntityManager() ->createQuery("SELECT YEAR(u.dob) from AcmeDemoBundle:AppUsers u") ->getResult(); 运行此代码时,它显示以下错误 [语法错误]第0行,第7列:错误:预期为已知函数,获得“年” 为什么会发生这种情况

无法在symfony 2原则中使用YEAR()。下面给出了我的代码

   $users = $this->getEntityManager()
               ->createQuery("SELECT YEAR(u.dob) from AcmeDemoBundle:AppUsers u")
               ->getResult();
运行此代码时,它显示以下错误

[语法错误]第0行,第7列:错误:预期为已知函数,获得“年”


为什么会发生这种情况???

原则中不存在此函数(以及许多其他用于管理日期时间元素的函数)的映射。 您必须使用以下映射并将其添加到配置中

# Doctrine Configuration
doctrine:
    orm:
        dql:
            datetime_functions:
                year: DoctrineExtensions\Query\Mysql\Year

您还可以通过更多的工作将其映射到您自己的函数。

将自定义函数添加到条令中,例如:

<?php
namespace Project\CustomBundle\Dql;

use Doctrine\ORM\Query\AST\Functions\FunctionNode;
use Doctrine\ORM\Query\Lexer;
use Doctrine\ORM\Query\SqlWalker;
use Doctrine\ORM\Query\Parser;

class YearFunction extends FunctionNode
{
    private $arg;

    public function getSql(SqlWalker $sqlWalker)
    {
        return sprintf('YEAR(%s)', $this->arg->dispatch($sqlWalker));
    }

    public function parse(Parser $parser)
    {
        $parser->match(Lexer::T_IDENTIFIER);
        $parser->match(Lexer::T_OPEN_PARENTHESIS);

        $this->arg = $parser->ArithmeticPrimary();

        $parser->match(Lexer::T_CLOSE_PARENTHESIS);
    }
}

我不知道DoctrineExtensions有Year和其他函数,所以@Ahmed answer更准确,但我将把它作为一个简单的方法示例,为DoctrineThank u添加自定义函数,以获得您的答案@waldek_c。。。我尝试了你的代码…但没有显示任何内容…无论如何,再次感谢你的回复..感谢你的回复@ahmed..有关于条令扩展的详细描述..无论如何,我会尝试那样做..谢谢
#config.yml

doctrine:
  orm:
    ...
    dql:
      datetime_functions:
        year: Project\CustomBundle\DqlYearFunction