简化symfony2中的查询

时间:2012-01-07 18:53:42

标签: php symfony doctrine-orm

(我不确定如何使标题更清晰 - 随意编辑它)

我有两张 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();

???

我会感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

您是否在DQL查询中选择了Winery?

$entities = $em->getRepository('MyBundle:Wine')
    ->createQueryBuilder('w')
    ->select('w, wnr')
    ->leftJoin('w.winery', 'wnr');
    ->getQuery()
    ->getResult();