在我的Symfony2存储库中,我想从调度表中获取已经启动但尚未完成的对象.对象内的区间应该是"未完成",应该作为变量传递.
使用纯SQL,它的工作方式如下:
SELECT * FROM slots rbs
WHERE rbs.rundate = '2012-08-13'
AND rbs.runtime <= '11:05:00'
AND '11:05:00' <= rbs.runtime + interval '300 seconds'
ORDER BY rbs.rundate DESC, rbs.runtime DESC
Run Code Online (Sandbox Code Playgroud)
我可以使用DQL/Query Builder实现相同的功能吗?
这是我到目前为止:
$qb = $this->createQueryBuilder('rbs');
$qb->where(
$qb->expr()->andX(
$qb->expr()->eq('rbs.rundate', ':date'),
$qb->expr()->lte('rbs.runtime', ':time'),
'rbs.runtime + interval 300 seconds >= :time'
)
)
->orderBy('rbs.rundate', 'DESC')
->addOrderBy('rbs.runtime', 'DESC')
->setParameter('date', date('Y-m-d'))
->setParameter('time', date('H:i:s'))
Run Code Online (Sandbox Code Playgroud)
但是这会返回以下错误:
[Doctrine\ORM\Query\QueryException]
[Syntax Error] line 0, col 139: Error: Expected =, <, <=, <>, >, >=, !=, got '300'
Run Code Online (Sandbox Code Playgroud)
我发现Doctrine2/DQL 不支持'interval',这也在 …
我使用PHP 5.3.8在Mac Book Pro上的本地apache2网络服务器上安装了以下PHP代码,默认时区设置为欧洲/苏黎世:
$now = time();
$in5min = $now + 300;
echo "now: " . date('H:m:s', $now);
echo "<br>in 5 min: " . date('H:m:s', $in5min);
echo "<br>now using date only: " . date('H:m:s');
Run Code Online (Sandbox Code Playgroud)
结果如下(2012年7月26日18:16:12运行):
now: 18:07:01
in 5 min: 18:07:01
now using date only: 18:07:01
Run Code Online (Sandbox Code Playgroud)
请注意,我可以刷新页面 - 秒数更改,小时和分钟保持不变.所以5分钟后它仍然是18:07.
我的网络服务器设置有什么问题?为什么时间计算不起作用?