原则 2 DATE_ADD具有计算间隔值的 mysql 函数



我有一个查询,它为我提供了一个 unix 时间戳,该时间戳计算为选择表字段的日期时间值,然后添加表的另一个值。查询如下所示:

SELECT UNIX_TIMESTAMP(DATE_ADD(mydatetimefield, INTERVAL m.myfield1 + m.myfield2 MINUTE)) FROM mytable AS m

此查询从phpMyAdmin正确执行,但是当我尝试将其与Doctrine 2的createQueryBuilder方法一起使用时,我在"myfield"处出现错误。似乎它不支持 INTERVAL 关键字后的计算值

Error: Expected DoctrineORMQueryLexer::T_COMMA, got 'm'

然后,如何使用原则获得相同的查询结果?我使用查询生成器,因为我有一些命名参数

默认情况下,

Doctrine不支持特定供应商的所有功能,例如DATE_ADD。 但是,您可以使用自定义函数。 该链接有一个专门用于日期添加的示例。

原则 2:用户定义函数中扩展 DQL

根据查询的复杂性,另一个选项只是在应用程序代码中处理此问题。 如果你的mydatetimefield实际上是一个日期时间,Doctrine 会在返回的对象中将其转换为 php DateTime

$myDateTimeField = $object->getMyDateTimeField();
$myDateTimeField->add(new DateInterval( $object->getMyField1() + $object->getMyField2() . 'M'));

最后,您也可以始终使用dbal

不确定这是否是原因,但由于它抱怨您有m别名的逗号丢失,我怀疑它无法正确解析用户定义的函数。

是否已将DATE_ADDUNIX_TIMESTAMP定义为 DQL 用户定义函数?有关更多详细信息,请参阅日期添加示例。

相关内容

  • 没有找到相关文章