2

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

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

错误:预期的 Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS,得到 '48'"

4

2 回答 2

3

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

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

它将打印如下 SQL,

...... DATE_ADD(p0_.appointmentDate, INTERVAL 48 HOUR) >= UTC_TIMESTAMP() .....
于 2019-04-11T07:15:36.100 回答
2

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

在这个 git repo DoctrineExtensions中有一套完整的功能

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

于 2019-04-11T06:06:47.890 回答