2017-09-13 1 views
0

실제 질문이 아니라 다른 사용자에게 도움이 될 수있는 스티커 메모입니다. 비슷한 다른 많은 질문이 있습니다. 1, 2, 3, 4, 5, 6 등이 있지만 이러한 해결책을 제시하지는 못합니다.Doctrine 2 : 하나 이상의 루트 엔티티 별칭을 선택하지 않고 식별 변수를 통해 엔티티를 선택할 수 없습니다.


나는 다음과 같은 요소를 가지고 :

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 

을하지만 다음과 같은 오류 얻을 :

[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

이것은 알려진 교리 제한 사항입니다.

이 솔루션은 명시 적으로 SELECTWITH 조건을 사용하여 당신이 (Customer)를 검색하고 수동으로 다른 엔티티 (Order)에 가입 거기에서 할 엔티티에 :

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