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

Joh*_*e66 10 mysql datetime dql symfony doctrine-orm

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

我怎么能意识到这一点?

Syb*_*bio 17

您可以在doctrine2中扩展和注册DATE()函数以使用DQL.检查这个解决方案.

现在如果你不想扩展doctrine2,那么我的解决方案就是:

根据日期搜索:

你可以得到一天开始的日期时间和结束的日期时间之间的间隔,我已在这里回答.

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

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

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

        $users = $query->getResult();
Run Code Online (Sandbox Code Playgroud)

根据小时搜索:

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

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

提醒你," _ "(下划线)表示1个字符(和任何字符!).

选择你的解决方案;)