我有这样的结构:
Campaigns
id
visits <- OneToMany relation
Visits
id
actions <- OneToMany relation
orders <- OneToMany relation
Actions
id
visit_id
date
Orders
id
visit_id
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尝试了相同的方法,但是它返回了所有操作和命令,不仅是在特定日期范围内。
我也尝试了无条件的连接,简单地与另一个位置进行左连接,但是它也不起作用。
你们知道如何解决这个问题吗?
答案 0 :(得分:0)
问题解决了。在我的数据库中,记录的日期开始于2018年,即2018年。这就是该查询不起作用的原因。