我使用 Symfony 2 和 Doctrine。在我的数据库 MySQL 中,我有一个类型为 的字段DateTime
。在我的存储库文件中,通过使用QueryBuilder
,我想在我的Where
子句中仅按日期(无时间)和时间(无日期)在此表中搜索。
我怎么能意识到这一点?
我使用 Symfony 2 和 Doctrine。在我的数据库 MySQL 中,我有一个类型为 的字段DateTime
。在我的存储库文件中,通过使用QueryBuilder
,我想在我的Where
子句中仅按日期(无时间)和时间(无日期)在此表中搜索。
我怎么能意识到这一点?
您可以扩展和注册doctrine2 中的DATE()函数以使用DQL。检查这个解决方案。
现在,如果您不想扩展学说2,这里是我的解决方案:
根据日期搜索:
你可以得到一天开始的日期时间和结束的日期时间之间的间隔,我已经在这里回答了。
这是约会最干净的解决方案(我认为)!
现在另一个简单的解决方案是将日期时间字段作为字符串与LIKE运算符进行比较,因此您也可以这样做:
$query = $repository->createQueryBuilder('u')->where('u.createdAt LIKE :date')
->setParameter('date', '2013-05-06%')
->getQuery();
$users = $query->getResult();
按小时搜索:
除了作为字符串比较之外,我不知道 DQL 的另一种解决方案(除非您使用 DATE 扩展学说),这里的代码:
$query = $um->getRepository()->createQueryBuilder('u')->where('u.createdAt LIKE :date')
->setParameter('date', '____-__-__ 10:45:__')
->getQuery();
提醒您,“ _ ”(下划线)表示 1 个字符(以及任何字符!)。
选择您的解决方案;)
我的部分代码对我有用:
$qb->andWhere('s.createdAt LIKE :createdAt');
$qb->setParameter('createdAt', $startDate->format("Y-m-d") . "%");