【问题标题】:Right join query in symfony3 with doctrinesymfony3中的右连接查询与学说
【发布时间】:2017-01-03 09:37:33
【问题描述】:

我想将下面的 sql 查询转换为 symfony 中的学说查询。

select p.name,p.id,sum(t.amount) as bal from transactions t right join processors p on t.processor_id=p.id where user_id=18 or user_id is null group by p.id

上述代码通过汇总每个处理器的用户的每笔交易的金额,从交易表中获取余额。

结果:

处理器1 --------- 43

处理器2 --------- 12

处理器3 --------- NULL

处理器4 --------- NULL

处理器5 --------- NULL

我用 dql 尝试的查询是:

$sql = $procRepo->createQueryBuilder('t');
        $sql->select('p.name');
        $sql->leftJoin('t.processorId','p');
        $sql->addSelect('sum(t.amount) as bal');
        $sql->groupBy('p.id');
        $sql->orderBy('p.name')->getQuery()->getResult();

结果:

处理器1 --------- 43

处理器2 --------- 12

所以我的问题是我也想获得 NULL 行。

注意:我使用的是 Symfony 3

有人可以帮忙吗?

【问题讨论】:

    标签: sql join doctrine-orm symfony right-join


    【解决方案1】:

    您需要反转join 语句以获取所有处理器:

    $sql = $procRepo->createQueryBuilder('p');
    $sql->select('p.name', 'sum(t.amount) as bal');
    $sql->leftJoin('p.transaction', 't');
    $sql->groupBy('p.id');
    $result = $sql->orderBy('p.name')->getQuery()->getResult();
    

    此查询必须在您的ProcessorRepository 中进行。

    【讨论】:

    • 我这样做的时候得到了这个。 [Semantical Error] line 0, col 80 near 't GROUP BY p.id': Error: Class ModelBundle\Entity\Processor has no association named transaction我需要添加任何映射信息到处理器实体
    • 是的,这不是关系的确切名称,请在您的真实代码中修复它。
    • 其实我有两个实体:处理器和事务
      事务中的列“processor_id”有一个manyToOne映射。处理器实体没有任何映射到事务
    • 好吧,使用rightJoin 语句测试您的原始查询
    • 它成功了,只需要一个 inversedBy 和 mappedBy 组合 :) 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多