查询生成器:检索最近 X 个月的实体
Query Builder : Retrieve entities from the last X Months
我正在尝试为单个用户检索过去 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,但我遇到了太多无法处理的错误。
试试这个(我猜你在你的 Facture 存储库中):
$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())
;
我正在尝试为单个用户检索过去 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,但我遇到了太多无法处理的错误。
试试这个(我猜你在你的 Facture 存储库中):
$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())
;