Symfony迭代对象

时间:2016-07-20 13:08:29

标签: php doctrine-orm symfony

我有以下对象结构:Order->RepairJobs->PartsPart有一个布尔属性InStock。找出某个Order是否包含RepairJobsParts没有库存的最有效方法是什么?我应该遍历每个RepairJob然后遍历每个Part,还是Symfony / Doctrine对此有一些智能功能?

1 个答案:

答案 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”都是对象的集合。

希望这是有道理的。但这就是它的完成方式,它使得代码变得非常容易。