Доктрина - двойное соединение с условием - PullRequest
0 голосов
/ 09 января 2019

У меня есть такая структура:

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, но он возвращает все действия и ордера, а не только их в конкретном диапазоне дат.

Я также пытался без условий в соединении, просто левое соединение с другим, где, но это тоже не работает.

Ребята, вы знаете, как решить эту проблему?

1 Ответ

0 голосов
/ 09 января 2019

Проблема решена. В моей базе данных были записи с датой начала 2018 года, а не 2019 года. Именно поэтому этот запрос не работал.

...