У меня есть такая структура:
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, но он возвращает все действия и ордера, а не только их в конкретном диапазоне дат.
Я также пытался без условий в соединении, просто левое соединение с другим, где, но это тоже не работает.
Ребята, вы знаете, как решить эту проблему?