0

私はテーブルのようなものを持っています。

ID | startdatetime
1  | 2013-08-30 22:30:00
2  | 2013-08-29 12:00:00
3  | 2013-08-29 13:30:00
4  | 2013-08-27 11:30:00
5  | 2013-08-27 13:30:00
6  | 2013-08-26 09:30:00

日付に属するデータを取得したい (たとえば、行 2 と 3 がに属している2013-08-29)

どうすれば Doctrine で書くことができますか?

$em = $this->getDoctrine()->getEntityManager();

$items = $em->getRepository("UserBundle:Table")->findBy('startdatetime' => '*****'));
4

2 に答える 2

2

次の 2 つのオプションがあります。

1 - 手っ取り早い方法は、MySQL SUBSTRING を使用して datetime から日付を取得することです。

WHERE SUBSTRING(dateTimeField,1,10) = '2013-08-29'

2 - DoctrineExtensionsを使用すると、次のようにデータを選択できます。

$q->select('p')
  ->where('YEAR(startdatetime) = :year')
  ->andWhere('MONTH(startdatetime) = :month')
  ->andWhere('DAY(startdatetime) = :day');

$q->setParameter('year', $year)
  ->setParameter('month', $month)
  ->setParameter('day', $day);
于 2013-10-22T08:01:36.883 に答える
0

別の解決策:

リポジトリにgetDay()関数を追加します。Table

public function getDay($date)
{
    $qb = $this->createQueryBuilder('t');

    $q = $qb
        ->add('where',
        $qb->expr()->like('t.startdatetime', 
            $qb->expr()->literal($date.'%')))
        ->getQuery();

    return $q->getResult();
}

次に、この関数を呼び出します。

$items = $em->getRepository("UserBundle:Table")
    ->getDay('2013-08-29');
于 2013-10-22T12:20:28.617 に答える