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

标签 php symfony doctrine-orm

我有两个彼此相关的表(main_table OneToMayDetail_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();

知道如何解决这个问题吗? 提前致谢。

请不要建议使用 native 查询

最佳答案

这是我根据此链接找到的内容 ( Doctrine Update DQL function signature )
Doctrine2 有函数 DATE_ADD 但没有 MySQL 那样的 INTERVAL 参数,而且单位参数应该是字符串 '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()

关于php - 如何使用 DATE_ADD 使用 createQueryBuilder 比较 Doctrine 和 Symfony2 中的日期范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23301179/

相关文章:

javascript - 使用 ajax 在服务器端接收 json 时出错

支持 PHP 的 Java 数据库

Symfony2 SSL 证书,验证 CA 证书是否正常。错误 :14090086

symfony - 如何控制 Doctrine Event 订阅者的优先级

PHP 面向对象 "Implementation must be compatible"

php - 我如何选择什么以及何时使用 ob_start 缓存数据而不是查询数据库?

Symfony 3.4 Autowiring 服务

forms - [Symfony][Form] 仅当属性发生变化时才向属性添加验证器/约束

orm - 为什么需要在 ORM 中分离和合并实体?

php - 我应该在哪里注册我的 DBAL 类型?