日付フィールドのあるテーブルを持つSyfmony2アプリがあります。この日付フィールドはDateTime型です。
今と同じ日付のすべてのエンティティを取得する必要があります。
しかし、私がそうするなら:
$now = new \DateTime();
$data = $entityRepository->findByDate($now);
DoctrineはDateTimeオブジェクトを比較し、時間ではなく年、月、日のみを比較する必要があります... DateTimeではなくDateオブジェクトのみを比較する必要があるため、結果は0です。
何か案が?ありがとう
私はこの簡単な方法を見ます:
$now = new \DateTime();
$data = $entityRepository->getByDate($now);
その後、リポジトリで
public function getByDate(\Datetime $date)
{
$from = new \DateTime($date->format("Y-m-d")." 00:00:00");
$to = new \DateTime($date->format("Y-m-d")." 23:59:59");
$qb = $this->createQueryBuilder("e");
$qb
->andWhere('e.date BETWEEN :from AND :to')
->setParameter('from', $from )
->setParameter('to', $to)
;
$result = $qb->getQuery()->getResult();
return $result;
}
リポジトリ内のメソッド
public function getDays(\DateTime $firstDateTime, \DateTime $lastDateTime)
{
$qb = $this->getEntityManager()->createQueryBuilder()
->select('c')
->from('ProjectBundle:Calendar', 'c')
->where('c.date BETWEEN :firstDate AND :lastDate')
->setParameter('firstDate', $firstDateTime)
->setParameter('lastDate', $lastDateTime)
;
$result = $qb->getQuery()->getResult();
return $result;
}
そしてアクション
public function calendarAction()
{
$currentMonthDateTime = new \DateTime();
$firstDateTime = $currentMonthDateTime->modify('first day of this month');
$currentMonthDateTime = new \DateTime();
$lastDateTime = $currentMonthDateTime->modify('last day of this month');
$days = $this->getDoctrine()
->getRepository('ProjectBundle:Calendar')
->getDays($firstDateTime, $lastDateTime);
return ['days' => $days];
}
doctrineのdate
タイプとdatetime
タイプには違いがあります。
date:SQL DATETIMEをPHP DateTimeオブジェクトにマッピングするタイプ。
datetime:SQL DATETIME/TIMESTAMPをPHP DateTimeオブジェクトにマッピングするタイプ。
列タイプをdate
ではなくdatetime
に設定したことを確認してください。
または、回避策として、元のdate1から日を取得し、カスタムリポジトリメソッドを使用して、同日date2-> 00:00:00と同日date3-> 23:59:59を検索できます。