2017-09-13 7 views
0

実際の質問ではなく、これは自分自身のためのメモです。他にも多くの同様の質問があります:123456などですが、この解決策を提供していないようです。Doctrine 2:少なくとも1つのルートエンティティエイリアスを選択せず​​にI​​D変数でエンティティを選択することはできません


私は次のエンティティがあります

class Order 
{ 
    // ... 

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

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

class Customer 
{ 
    // ... 
} 

OrderCustomerと単方向、多対1の関係を持っています。私は彼の注文の合計金額と一緒に、すべての顧客を取得したいので、私は、次の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.

を?

答えて

1

これは既知のDoctrineの制限です。

ソリューションです明示的SELECTWITH条件使用して、あなたが(Customer)を取得し、手動で他のエンティティ(Order)に参加、そこからするエンティティへ:

SELECT c, SUM(o.amount) 
FROM Model\Customer c 
JOIN Model\Order o WITH o.customer = c 
GROUP BY c 
関連する問題