原则2:如果不选择至少一个根实体别名,则无法通过标识变量选择实体

Ben*_*min 9 doctrine-orm

而不是一个实际的问题,这对我自己来说是一个粘滞便笺,可能对其他人有帮助.还有许多其他类似的问题:1,2,3,4,5,6,但他们都不似乎提供了这种解决方案.


我有以下实体:

class Order
{
    // ...

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

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

class Customer
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

Order与...具有单向,多对一的关系Customer.我想让每个客户以及他的订单总量,所以我运行以下DQL查询:

SELECT c, SUM(o.amount)
FROM Model\Order o
JOIN o.customer c
GROUP BY c
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

[Doctrine\ORM\Query\QueryException]
[语义错误]第0行,col-1靠近'SELECT c,SUM(o.amount)':错误:如果不选择至少一个根实体别名,则无法通过标识变量选择实体.

我该如何解决?

Ben*_*min 10

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

解决方案是明确SELECT要检索Customer的实体(Order)并使用WITH条件从那里手动加入另一个实体():

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