原则-有条件的双重加入

时间:2019-01-09 12:42:48

标签: mysql symfony doctrine-orm doctrine dql

我有这样的结构:

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 :(得分:0)

问题解决了。在我的数据库中,记录的日期开始于2018年,即2018年。这就是该查询不起作用的原因。