10

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

我怎么能意识到这一点?

4

2 回答 2

17

您可以扩展和注册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 个字符(以及任何字符!)。

选择您的解决方案;)

于 2013-06-17T18:07:54.973 回答
4

我的部分代码对我有用:

$qb->andWhere('s.createdAt LIKE :createdAt');
$qb->setParameter('createdAt', $startDate->format("Y-m-d") . "%");
于 2015-04-15T09:37:45.507 回答