当我使用下面的查询(Doctrine 2)时,我遇到了错误,并且不能在查询中使用 INTERVAL,
$qb->andWhere("(pv.appointment_date + INTERVAL 48 HOUR) >= UTC_TIMESTAMP()");
错误:预期的 Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS,得到 '48'"
当我使用下面的查询(Doctrine 2)时,我遇到了错误,并且不能在查询中使用 INTERVAL,
$qb->andWhere("(pv.appointment_date + INTERVAL 48 HOUR) >= UTC_TIMESTAMP()");
错误:预期的 Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS,得到 '48'"
如果你想在 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() .....
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()