我有以下对象结构:Order->RepairJobs->Parts
。 Part
有一个布尔属性InStock
。找出某个Order
是否包含RepairJobs
与Parts
没有库存的最有效方法是什么?我应该遍历每个RepairJob
然后遍历每个Part
,还是Symfony / Doctrine对此有一些智能功能?
答案 0 :(得分:0)
在您的控制器中添加查询构建器:
$em = $this->getDoctrine()->getManager();
$qb = $em->createQueryBuilder();
$qb->select('p')
->from('AppBundle:Part', 'p')
->where('p.InStock = false');
$parts = $qb->getQuery()->getResult();
传递渲染Twig模板,如下所示:
return $this->render('show/orders_without_stock.html.twig', array(
'parts' => $parts,
));
然后在Twig中迭代:
<h2>Orders With Parts Not in Stock</h2>
<table>
<tr>
<th>Order</th>
</tr>
{% for part in parts %}
<tr>
<td>{{ part.getRepairJob.getOrder }}</td>
</tr>
{% endfor %}
</table>
在上面的Twig中,'part'是Part对象,'getRepairJob'是获取Repair Entity的Part方法。这得到一个RepairJob对象,然后'getOrder'是获取Order对象的RepairJob方法。 我假设你已经设置了你的实体和正确的ORM注释来映射每个实体。 “RepairJobs”和“Parts”都是对象的集合。
希望这是有道理的。但这就是它的完成方式,它使得代码变得非常容易。