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

时间:2017-09-13 21:16:35

标签: doctrine-orm

这不是一个实际的问题,这对我自己来说是一个粘滞便笺,可能对其他人有帮助。还有许多其他类似的问题:123456,但它们似乎都没有提供这个解决方案。

我有以下实体:

class Order
{
    // ...

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

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

class Customer
{
    // ...
}

OrderCustomer具有单向,多对一的关系。我希望得到每个客户以及他的订单总量,因此我运行以下DQL查询:

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

但是我收到以下错误:

  

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

我该如何解决?

1 个答案:

答案 0 :(得分:7)

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

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

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