(我不确定如何使标题更清晰 - 随意编辑它)
我有两张 wine 和葡萄酒厂的桌子。每种葡萄酒都有一个酒庄 如果我想用相应的酿酒厂生产所有葡萄酒的清单,我可以这样做:
$entities = $em->getRepository('MyBundle:Wine')->findAll();
和
{% for entity in entities %}
{{ entity.winery.name }} {{ entity.name }} <br />
{% endfor %}
此解决方案的问题在于,我想要阻止每个酒厂的额外查询。
我尝试了symfony2 manual中使用的技术,但我无法使其工作(它只适用于单个结果吗?)。
通常使用SQL,我只会做一个LEFT JOIN
,但我无法弄清楚如何在Doctrine2中完成它。
$qb = $this->createQueryBuilder('w', 'wnr');
$qb->leftJoin('w.winery', 'wnr');
$qb->orderBy('w.name', 'ASC');
$qb->getQuery()->getResult();
???
我会感谢任何帮助!
答案 0 :(得分:3)
您是否在DQL查询中选择了Winery?
$entities = $em->getRepository('MyBundle:Wine')
->createQueryBuilder('w')
->select('w, wnr')
->leftJoin('w.winery', 'wnr');
->getQuery()
->getResult();