mysql - Doctrine - 带条件的双重连接

标签 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 相同的方式,但它返回所有操作和订单,而不仅仅是特定日期范围内的操作和订单。

我也尝试过无条件连接,简单的左连接与另一个where,但它也不起作用。

你们知道如何解决这个问题吗?

最佳答案

问题已解决。在我的数据库中,有日期从 2018 年而不是 2019 年开始的记录。这就是此查询不起作用的原因。

关于mysql - Doctrine - 带条件的双重连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54110443/

相关文章:

symfony - Doctrine 2(Symfony)结果集与自定义字段的映射始终为空

MySQL查询计算上个月

mysql - 尝试恢复大于 10 GB 的 sql 转储文件

symfony - 如何在Symfony 2中配置“记住我”的监听器?

forms - Symfony2 中带有 formType 和 Doctrine2 的 jQuery 自动完成字段

php - Symfony2 Doctrine 查询生成器作为 FROM 子句中的子查询

php - LARAVEL:MYSQL:违反完整性约束:1452 无法添加或更新子行:外键约束失败

java - WSDL 中没有指定操作

validation - 我如何为 @Assert\EqualTo 验证字段实体使用多个值

symfony - 检查每个实体的分页概述的权限