作者:呜呀003_581 | 来源:互联网 | 2023-09-15 12:12
我有一个查询,该查询为我计算了一个unix时间戳,该时间戳选择了一个表字段的datetime值,然后添加了该表的另一个值.该查询类似于以下内容:SELECTUNIX_
我有一个查询,该查询为我计算了一个unix时间戳,该时间戳选择了一个表字段的datetime值,然后添加了该表的另一个值.该查询类似于以下内容:
SELECT UNIX_TIMESTAMP(DATE_ADD(mydatetimefield, INTERVAL m.myfield1 + m.myfield2 MINUTE)) FROM mytable AS m
此查询可从phpMyAdmin正确执行,但是当我尝试将其与Doctrine 2的createQueryBuilder方法一起使用时,在“ myfield”出现错误.似乎在INTERVAL关键字后不支持计算值
Error: Expected Doctrine\ORM\Query\Lexer::T_COMMA, got 'm'
然后,如何使用主义获得相同的查询结果?我使用querybuilder是因为我有一些命名参数
解决方法:
默认情况下,Doctrine不支持特定供应商的所有功能,例如DATE_ADD.但是,您可以使用自定义功能.该链接有一个专门用于日期添加的示例.
Extending DQL in Doctrine 2: User-Defined Functions
根据查询的复杂性,另一个选择就是在应用程序代码中进行处理.如果您的mydatetimefield实际上是一个日期时间,Doctrine会将其转换为返回对象中的php DateTime.
$myDateTimeField = $object->getMyDateTimeField();
$myDateTimeField->add(new DateInterval( $object->getMyField1() + $object->getMyField2() . 'M'));
最后,您也可以始终使用dbal.