【发布时间】:2012-01-07 18:53:42
【问题描述】:
(我不确定如何使标题更清晰 - 请随意编辑)
我有两张桌子,分别是 wines 和 wineries。每种葡萄酒都有一个酒庄分配给它。
如果我想制作一个包含相应酒庄的所有葡萄酒的清单,我可以这样做:
$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();
???
如果有任何帮助,我将不胜感激!
【问题讨论】:
-
SQL、DQL、自己的方法。所有这些都列在您链接的手册页中。
-
@hakre:但是我以后如何访问它?如果我像这样离开加入,我将无法访问加入的属性。
-
这取决于您尝试实现的目标。当您使用 ORM 时,您通常不想使用 SQL。因此,请远离 SQL,看看您是否可以使用 DQL 解决您的问题。 DQL 将返回对象。
-
@hakre,我对 Symfony2 和 ORM 还是很陌生。我知道我收到了物品。但正如我向 Kuba 解释的那样,我还不太明白如何在一个查询中获取所需的所有数据。
-
查询只是返回多个对象,基本上就是这样。
标签: php symfony doctrine-orm