教义2如何从联接中进行求和,但按2列分组

问题描述

我正在使用Symfony和Doctrine Querybuilder返回订单列表,其中包含每个订单中所有产品的计数。这意味着我在Orders和OrderProducts之间具有1:n的关系,OrderProducts表存储了OrderID和每种产品的数量。如果我执行groupBy o.orderId,那么我得到正确的Sum,但是我没有获得属于orderId的所有orderProducts的数据,因此,如果orderproducts表中有2个不同的Products,那么我得到的数量是2: 1个产品的数据,因此我需要按oi.orderProductId进行分组,但显然,一旦我添加了第二个groupBy oi.orderProductId,则TotalCount就会向我显示每个记录的总和。我完全知道这是正确的行为,但是如果有办法实现我要尝试的目标,我只是无法理解。我认为我必须以某种方式使用子选择,但是我不确定这是否有可能实现。到目前为止我的2张桌子和我尝试过的

tbl订单

orderId

dateCreated

tblorderProducts

orderProductid

orderId

数量

    return $this->createqueryBuilder('o')
        ->select(array(
            'o AS orderData','oi','sum(oi.qty)AS noOfItems'))
        ->join('o.orderItems','oi')
        ->groupBy('o.orderId')
        ->groupBy('oi.orderProductId')
        ->getQuery()
        ->execute();

我希望有人能给我提示我如何实现它。预先非常感谢。

解决方法

groupBy()方法始终替换当前的group by子句。使用addGroupBy() method instead