0

我需要能够在 Doctrine 中使用以下 WHERE 子句:

WHERE AL.UserID = 41 AND (TheDate BETWEEN DATE_SUB(CURDATE(), INTERVAL 2 WEEK) AND CURDATE())

我目前正在做的是:

$results = $em->getRepository('MyBundle:MyTable')->findOneBy(array('userId' => $userId));

但是,如果不编写 SQL 或 DQL,我无法在过去 2 周内过滤结果。

有什么方法可以通过 Doctrine 的方法实现这一点?

4

1 回答 1

1

您可以使用QueryBuilder。假设您使用的是 MySQL BETWEEN,例如:

<?php

// $em instanceof EntityManager
$qb = $em->createQueryBuilder();
$now = new DateTime();
$qb->select('c')
   ->from('MyClass', 'c')
   ->where($qb->expr()->andX(
       $qb->expr()->eq('c.UserID', '?1'),
       $qb->expr()->gte('c.TheDate', '?2'),
       $qb->expr()->lte('c.TheDate', '?3')
   ))
   ->setParameter(1, 41)
   ->setParameter(2, $now.sub(new DateInterval('P2W')))
   ->setParameter(3, $now);
$query = $qb->getQuery();
$c = $query->getSingleResult();

这是更简洁的代码,应该可以在 Doctrine2 ORM 支持的不同数据库平台上工作。

于 2013-07-16T05:27:28.583 回答