我有这样的结构:
Campaigns
id
visits <- OneToMany relation
Visits
id
actions <- OneToMany relation
orders <- OneToMany relation
Actions
id
visit_id
date
Orders
id
visit_id
date
我需要接受访问、行动和命令的活动,但只有fullfil条件(他们的date属性在最近7天的范围内)。
这是我的密码:
$qb = $this->createQueryBuilder('c');
$qb->join('c.visits', 'v');
$period = isset($params['period']) ? $params['period'] : 7;
$starting_date = new \DateTime("today -{$period} days");
$ending_date = new \DateTime('today 23:59:59');
$qb->innerJoin('v.actions', 'a', 'WITH', 'v.id = a.visit AND a.date >= :starting_date AND a.date <= :ending_date')
->setParameter('starting_date', $starting_date)
->setParameter('ending_date', $ending_date)
;
$qb->innerJoin('v.orders', 'o', 'WITH', 'v.id = o.visit AND o.date >= :starting_date AND o.date <= :ending_date')
->setParameter('starting_date', $starting_date)
->setParameter('ending_date', $ending_date)
;
return $qb->getQuery()->getResult();
我也用同样的方法尝试了leftjoin,但它返回所有操作和命令,而不仅仅是特定日期范围内的操作和命令。
我也尝试了无条件的连接,简单的左连接和另一个where,但效果不太好。
你们知道怎么解决这个问题吗?
1条答案
按热度按时间omqzjyyz1#
问题解决了。在我的数据库中有日期从2018年开始而不是2019年的记录。这就是为什么这个查询不起作用的原因。