Symfony 查询生成器:检索过去X个月的实体

Symfony 查询生成器:检索过去X个月的实体,symfony,query-builder,Symfony,Query Builder,我试图为单个用户检索过去3个月的所有Facture,我找到了SQL方法,但我很难将此逻辑应用到查询生成器,我使用的是Symfony3-3 $now = new Date('now'); $qb = $em->createQueryBuilder(); $qb->select('f') ->from('Facture', 'f') ->where('f.doDate BETWEEN :old AND :now') ->andw

我试图为单个用户检索过去3个月的所有
Facture
,我找到了SQL方法,但我很难将此逻辑应用到查询生成器,我使用的是Symfony3-3

$now = new Date('now');
$qb = $em->createQueryBuilder();
   $qb->select('f')
      ->from('Facture', 'f')
      ->where('f.doDate BETWEEN :old AND :now')
      ->andwhere('f.userId =:id')
      ->setParameter('old', ($now-90))
      ->setParameter('now', $now);
      ->setParameter('id', $user->getId());
这就是我试图实现的问题:

SELECT * FROM Facture WHERE (f.DO_Date BETWEEN CURDATE() - INTERVAL 90 DAY AND CURDATE()) AND f.clientId ='?someone's id?'
注意:我尝试了DQL,但我有太多的错误无法处理。试试这个(我猜你在制作库中):


返回的错误是什么?@Veve它不记得很清楚,但正如我从调试中记得的,它是关于约束和日期的,价格昂贵,大约$now-90。你是对的,我在myFactureRepository中,我会尝试一下。我得到了这个错误:
[Semantical error]第0行,第22列(f.doDate-BETWEEN):错误:类('未定义。|
如果您尝试以下操作:
$qb=$em->createQueryBuilder('f')->和where('f.doDate介于:startDate和:endDate')…;
查询生成器如何知道f表示实体:
制作
?因为您在存储库中。如果您在实体上设置了repositoryClass
$qb = $em->createQueryBuilder('f');
$qb->andWhere(
       $qb->expr()->between('f.doDate', ':startDate', ':endDate')
    )
  ->andwhere('f.userId =:id')
  ->setParameter('startDate', new \DateTime('-90 days'))
  ->setParameter('endDate', new \DateTime());
  ->setParameter('id', $user->getId())
;