私の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
DQL /クエリビルダーで同じことを達成できますか?
これは私がこれまでに持っているものです:
$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'))
ただし、これは次のエラーを返します。
[Doctrine\ORM\Query\QueryException]
[Syntax Error] line 0, col 139: Error: Expected =, <, <=, <>, >, >=, !=, got '300'
'interval'はDoctrine2/DQLでサポートされていないことがわかりました。これは、ここでも言及されています。
Doctrine2のクエリビルダーまたはDQLを使用してこれを実現する方法(および間隔を変数として渡す方法)に関する提案はありますか?