原则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