原则2:不能选择实体通过识别变量而不选择至少一个根实体别名

问题描述:

而不是一个实际的问题,这是一个便笺,可以帮助他人。还有很多其他类似的问题:1,2,3,4,5,6,但他们都没有提供这种解决方案。原则2:不能选择实体通过识别变量而不选择至少一个根实体别名


我有以下实体:

class Order 
{ 
    // ... 

    /** 
    * @ManyToOne(targetEntity="Customer") 
    * @var Customer 
    */ 
    private $customer; 

    /** 
    * @Column(type="integer") 
    * @var int 
    */ 
    private $amount; 
} 

class Customer 
{ 
    // ... 
} 

Order有一个单向的,多到一个与Customer关系。我想每一个客户,他的订单总金额一起,所以我运行下面的DQL查询:

SELECT c, SUM(o.amount) 
FROM Model\Order o 
JOIN o.customer c 
GROUP BY c 

,但我得到了以下错误:

[Doctrine\ORM\Query\QueryException]
[Semantical Error] line 0, col -1 near 'SELECT c, SUM(o.amount)': Error: Cannot select entity through identification variables without choosing at least one root entity alias.

我该如何解决?

这是一个已知的学说限制。

的解决方案是明确SELECT使用WITH条件你想从那里取回(Customer)和手动加入其他实体(Order)的实体:

SELECT c, SUM(o.amount) 
FROM Model\Customer c 
JOIN Model\Order o WITH o.customer = c 
GROUP BY c