如何使用DATE_ADD使用createQueryBuilder比较Doctrine和Symfony2中的日期范围

时间:2014-04-25 19:11:24

标签: php symfony doctrine-orm

我有两个彼此相关的表(main_table OneToMay detail_table)。主表中有deadline_days字段,detail_table中有create_date字段。我想根据今天的日期选择create_date + main.deadline_days传递的所有详细信息。 (这是情景)

这是正确的MySQL查询,它为我提供了正确的记录

SELECT  `D`.* FROM `details_table` AS  `D` 
INNER JOIN  `main_table` AS  `M` ON (`D`.`Main_Id` = `M`.`id`) 
WHERE DATE_ADD(`D`.`Create_Date`, INTERVAL  `M`.`Deadline_days` DAY) <= NOW()

现在在Symfony中,当我想使用createQueryBuilder创建查询时,它会出现此错误

[Syntax Error] line 0, col 165: Error: Expected Doctrine\ORM\Query\Lexer::T_COMMA, got 'M'

这就是我现在在查询构建器中所拥有的

$result = $this->createQueryBuilder('D')
->join('D.Main', 'M')
->where('DATE_ADD(D.Create_Date, INTERVAL M.DeadLine_Days DAY) <= NOW()')
->getQuery()
->getResult();

知道怎么解决这个问题吗? 提前谢谢。

请不要建议使用原生查询

1 个答案:

答案 0 :(得分:3)

这是我在此链接(Doctrine Update DQL function signature)上找到的内容 Doctrine2有函数DATE_ADD但没有INTERVAL参数作为MySQL,单元参数也应该是字符串'DAY';所以查询应该是:

$result = $this->createQueryBuilder('D')
   ->join('D.Main', 'M')
   ->where('DATE_ADD(D.Create_Date, M.DeadLine_Days, 'DAY') <= CURRENT_DATE()')
   ->getQuery()
   ->getResult();

在学说中我们应该使用CURRENT_DATE()代替NOW()