0

Doctrine で次の WHERE 句を使用できるようにする必要があります。

WHERE AL.UserID = 41 AND (TheDate BETWEEN DATE_SUB(CURDATE(), INTERVAL 2 WEEK) AND CURDATE())

私が現在やっていることは次のとおりです。

$results = $em->getRepository('MyBundle:MyTable')->findOneBy(array('userId' => $userId));

しかし、SQL や DQL を書かずに、過去 2 週間まで結果をフィルタリングすることはできませんでした。

Doctrineの方法でこれを達成する方法はありますか?

4

1 に答える 1

1

QueryBuilderを使用できます。MySQL を使用していると仮定するとBETWEEN、次のようになります。

<?php

// $em instanceof EntityManager
$qb = $em->createQueryBuilder();
$now = new DateTime();
$qb->select('c')
   ->from('MyClass', 'c')
   ->where($qb->expr()->andX(
       $qb->expr()->eq('c.UserID', '?1'),
       $qb->expr()->gte('c.TheDate', '?2'),
       $qb->expr()->lte('c.TheDate', '?3')
   ))
   ->setParameter(1, 41)
   ->setParameter(2, $now.sub(new DateInterval('P2W')))
   ->setParameter(3, $now);
$query = $qb->getQuery();
$c = $query->getSingleResult();

これはよりクリーンなコードであり、Doctrine2 ORM がサポートするさまざまなデータベース プラットフォームで動作するはずです。

于 2013-07-16T05:27:28.583 に答える