我有这样的结构:
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 相同的方法,但它返回所有操作和订单,而不仅仅是特定日期范围内的操作和订单。
我也尝试无条件地加入,简单的左加入另一个地方,但它也不起作用。
你们知道如何解决这个问题吗?
问题解决了。在我的数据库中,有一些日期以 2018 年开始的记录 2019 年。这就是此查询不起作用的原因。