无法在symfony 2 doctrine中使用YEAR()。我的代码如下:
$users = $this->getEntityManager()
->createQuery("SELECT YEAR(u.dob) from AcmeDemoBundle:AppUsers u")
->getResult();
运行此代码时,它显示以下错误
[语法错误]第0行,第7栏:错误:预期的已知功能,得到了“年”'
为什么会这样?
答案 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