如何使用doctrine查询构建器编写以下内容?
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);
但它给了我以下错误:
[语义错误]第0行,第178页'p ON reg.id ='附近:错误:识别变量BBB \ GiftBundle \ Entity \ Purchase在连接路径表达式中使用但之前未定义。
答案 0 :(得分:0)
DQL只能连接与当前实体相关的表(在此DQL中为Registry
)。您的Registry
实体需要具有声明的OneToMany关系。
假设这个关系被称为purchases
,你会像这样加入:
->leftJoin('reg.purchases', 'p')