0

doctrine query builder で次のように書くにはどうすればよいですか?

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

私は試した:

$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);

しかし、それは私に次のエラーを与えます:

[Semantical Error] line 0, col 178 near 'p ON reg.id =': エラー: 識別変数 BBB\GiftBundle\Entity\Purchase が結合パス式で使用されましたが、以前に定義されていませんでした。

4

1 に答える 1

0

RegistryDQL は、現在のエンティティ (この DQLにある) に関連するテーブルのみを結合できます。エンティティには、 OneToManyRegistry関係を宣言する必要があります。

このリレーションが呼び出されたと仮定すると、次purchasesのように参加します。

->leftJoin('reg.purchases', 'p')
于 2012-10-21T00:28:08.703 に答える