我正在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