YEAR函数在Symfony 2中不起作用

时间:2014-09-13 05:15:51

标签: php symfony

无法在symfony 2 doctrine中使用YEAR()。我的代码如下:

   $users = $this->getEntityManager()
               ->createQuery("SELECT YEAR(u.dob) from AcmeDemoBundle:AppUsers u")
               ->getResult();

运行此代码时,它显示以下错误

  

[语法错误]第0行,第7栏:错误:预期的已知功能,得到了“年”'

为什么会这样?

2 个答案:

答案 0 :(得分:4)

该函数的映射(以及用于管理datetime元素的许多其他函数)在doctrine中不存在。 您已使用DoctrineExtensions并将以下映射添加到您的配置中,

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

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

答案 1 :(得分:0)

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

<?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);
    }
}

在config.yml教义部分

#config.yml

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