我使用Symfony 2和Doctrine。在我的数据库MySQL中,我有一个DateTime
类型的字段。在我的Repository文件中,通过使用QueryBuilder
,我想在我的Where
子句中仅按日期(没有时间)和仅按时间(没有日期)搜索此表。
我怎么能意识到这一点?
答案 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") . "%");