我正在Symfony上编写一个简单的定制原则函数,它计算给定实体的bithdate的AGE。这里是我的功能:Symfony Custom DoctrineFunctions总是返回null
class AgeFunction extends FunctionNode
{
private $birthDate;
public function parse(\Doctrine\ORM\Query\Parser $parser)
{
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$this->birthDate = $parser->ArithmeticPrimary();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
{
$bday = $this->birthDate->dispatch($sqlWalker);
$currDate = DateFormatter::formatDate(new \DateTime());
return "TIMESTAMPDIFF(YEAR, {$bday}, '{$currDate}')";
}
}
这里是我如何使用它:
public function getAge()
{
$qb = $this->createQueryBuilder('s')
->select('AGE(s.dateOfBirth)')
->orderBy('s.id', 'DESC');
dump($qb->getQuery()->getResult());
}
这是产生的查询:
SELECT TIMESTAMPDIFF(YEAR,s0_.date_of_birth,“2017 -04-13')AS sclr_0 FROM suspect s0_ ORDER BY s0_.id DESC;
我认为这里错了什么是s0_.date_of_birth从来没有得到实际的价值,因为当我手动将它取代它效果很好。
那么我该如何做到这一点?谢谢。
当您在sql客户端(如phpmyadmin)中直接运行它时,生成的查询是否显示任何结果?我在我的一个数据库中测试了它,查询似乎是正确的。 –
我有点好奇,为什么按照教条而不是php来处理年龄? – goto