【发布时间】:2015-05-18 09:13:58
【问题描述】:
我只是想从一个表(建筑物)中列出一个视图中的所有实体,该表需要一个连接来显示一些细节(建筑物管理)。我想使用 Doctrine fetch join 选项来避免额外的查询,因为每个建筑物都必须显示其建筑物管理中的数据。
下面是一个基本的控制器示例。我的问题是必须在选择中包含bm 才能使用提取而不是常规连接。因此,$entities 变量包含b 和bm 实体,Twig 中的循环只等待b 实体。我该如何解决?
public function indexAction()
{
$em = $this->getDoctrine()->getManager();
// This way is working, but extra queries are generated when I need to access the BuildingManagement data from Building entity
//$entities = $em->getRepository('TrilogisPropertyBundle:Building')->findAll();
$entities = $em->createQuery(
'SELECT b, bm
FROM MyBundle:Building b
JOIN MyBundle:BuildingManagement bm WITH bm.building = b.id
ORDER BY b.id')
->getResult();
return $this->render('MyBundle:Test:index.html.twig', array(
'entities' => $entities,
));
}
在 TWIG 中
<table>
<thead>
<tr>
<th>ID</th>
<th>Building Management</th>
</tr>
</thead>
<tbody>
{% for entity in entities %}
<tr>
<td>{{ entity.id }}</td>
<td>{{ entity.buildingManagement.id}}</td> <-- will crash because the entity must be a building and not a buildingManagement
</tr>
{% endfor %}
</tbody>
</table>
【问题讨论】:
-
Building 和 BuildingManagement 之间有任何 ORM 关系吗?这样,您就可以从 Building 实体访问 BuildingManagement
-
@Cr3aHal0 我当然有关系。但您需要注意,从 Building 访问 BuildingManagement 会创建一个我想避免的额外查询
标签: php symfony doctrine-orm