在Symfony2和Doctrine中的DateTime字段中按时间搜索

时间:2013-06-17 17:21:36

标签: mysql datetime symfony doctrine-orm dql

我使用Symfony 2和Doctrine。在我的数据库MySQL中,我有一个DateTime类型的字段。在我的Repository文件中,通过使用QueryBuilder,我想在我的Where子句中仅按日期(没有时间)和仅按时间(没有日期)搜索此表。

我怎么能意识到这一点?

2 个答案:

答案 0 :(得分:16)

您可以在doctrine2中扩展并注册 DATE()函数以使用DQL。检查此solution

现在,如果你不想扩展doctrine2,我的解决方案就在这里:

根据日期搜索:

您可以获取一天开始日期时间与结束日期时间之间的时间间隔,我已经回答here

这是迄今为止最干净的解决方案(我认为)!

现在另一个简单的解决方案是将日期时间字段作为字符串与 LIKE 运算符进行比较,因此您也可以这样做:

$query = $repository->createQueryBuilder('u')->where('u.createdAt LIKE :date')
        ->setParameter('date', '2013-05-06%')
        ->getQuery();

        $users = $query->getResult();

根据小时搜索:

我不知道使用DQL的另一个解决方案,而不是比较为字符串(除非您使用DATE扩展doctrine),这里代码:

$query = $um->getRepository()->createQueryBuilder('u')->where('u.createdAt LIKE :date')
        ->setParameter('date', '____-__-__ 10:45:__')
        ->getQuery();

提醒您,“ _ ”(下划线)表示1个字符(以及任何字符!)。

选择您的解决方案;)

答案 1 :(得分:4)

我的部分代码对我有用:

$qb->andWhere('s.createdAt LIKE :createdAt');
$qb->setParameter('createdAt', $startDate->format("Y-m-d") . "%");