在学说中使用间隔时出错

Getting error while using interval in doctrine

当我使用下面的查询(Doctrine 2)时,我遇到了错误,并且不能在查询中使用 INTERVAL,

$qb->andWhere("(pv.appointment_date + INTERVAL 48 HOUR) >= UTC_TIMESTAMP()");

错误:应为 Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS,得到“48”

Doctrine 是一个使用 DQL 的 ORM,它与 SQL 不同。默认情况下,并非 sql 中的所有函数都被 doctine 支持。 DQL 不附带对 INTERVAL 的支持。为此,您必须添加用户定义的函数 DQL User Defined Functions

此 git 存储库中提供了一套完整的功能 DoctrineExtensions

而上面的查询会变成DATE_ADD(pv.appointment_date, INTERVAL 48 HOUR) >= UTC_TIMESTAMP()

如果你想在 mysql 列字段上使用 INTERVAL(在 Doctrine 2,DQL 中),你可以按如下方式使用,

$qb->andWhere("DATE_ADD(pv.appointmentDate,48,'hour') >= UTC_TIMESTAMP()");

它将打印 SQL 如下,

...... DATE_ADD(p0_.appointmentDate, INTERVAL 48 HOUR) >= UTC_TIMESTAMP() .....