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

我怎么能用教义写作?

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

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

2 回答 2

2

你有两个选择:

1 - 快速而肮脏的一种是使用 MySQL SUBSTRING 从日期时间中获取日期:

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 回答