2012-10-20 5 views
0

doctrine query builder로 다음을 작성하려면 어떻게해야합니까?참여시 Doctrine 쿼리 작성기 오류가 발생했습니다.

$qb = $this->createQueryBuilder('g') //gift 
    ->from('\BBB\GiftBundle\Entity\Registry', 'reg') 
    ->select('g.id , g.title, g.description, g.price, g.imageMedium') 
    ->addSelect('SUM(p.amount) as totalContribute') 
    ->leftJoin('\BBB\GiftBundle\Entity\Purchase', 'p', 'ON','reg.id = p.registry') 
    ->where('reg.gift = g.id') 
    ->AndWhere('reg.couple = :coupleID') 
    ->orderBy('reg.id','DESC') 
    ->groupBy('reg.couple') 
    ->groupBy('reg.gift') 
    ->setParameter('coupleID', $coupleID); 

를하지만 나에게 다음과 같은 오류를 제공합니다 :

SELECT 
    registry.id , 
    registry.couple_id, 
    registry.gift_id, 
    Sum(purchase.amount) as totalContribution, 
    gift.title, 
    gift.price 
FROM 
    gift, 
    registry 
LEFT JOIN 
    purchase ON purchase.registry_id = registry.id 
WHERE 
    registry.gift_id = gift.id 
    AND registry.couple_id = 1 
GROUP BY 
    registry.couple_id, 
    registry.gift_id 

나는 시도

[Semantical Error] line 0, col 178 near 'p ON reg.id =': Error: Identification Variable BBB\GiftBundle\Entity\Purchase used in join path expression but was not defined before.

답변

0

DQL 만 (즉,이 DQL에서 Registry 인) 현재의 엔티티에 관한 테이블을 조인 할 수 있습니다. Registry 엔티티는 선언 된 OneToMany 관계가 있어야합니다. 이 관계는 호출 된 것을 purchases 당신과 같이 결합 할 것입니다 가정

: 답장을 보내

->leftJoin('reg.purchases', 'p') 
+0

감사하지만 난 단지 ManyToOne 관계를 가지고 1 레지스트리는 많은 구매가 있습니다. 이 상황을 위해 어떻게 써야합니까? –

+0

양방향 관계를 원하지 않으면 [기본 SQL 쿼리] (http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/)를 작성해야합니다. reference/native-sql.html)을 참조하십시오. – Alex

관련 문제