读取Twig中的PersistentCollections,就像它们是一个数组一样

时间:2013-01-07 13:53:54

标签: php symfony doctrine-orm twig

我在两个类(协议和历史)之间存在双向一对多关系。在搜索特定协议时,我希望看到与该协议相关的所有历史记录条目。

在渲染我的模板时,我传递了以下内容:

return $this->render('FunarbeProtocoloAdminBundle:Protocolo:show.html.twig', array(
        'entity'      => $entity,
        'delete_form' => $deleteForm->createView(),
        'history' => $entity->getHistory(),
    )
);

entity->getHistory()返回PersistentCollection而不是数组,这会导致以下内容呈现错误:

{% for hist in history %}
<tr>
    <td>{{ hist.dtOcorrencia|date('d/m/Y H:i') }}</td>
    <td>{{ hist.dtRetorno|date('d/m/Y H:i') }}</td>
</tr>
{% endfor %}

如果不是$entity->getHistory()我通过了$em->getRepository('MyBundle:History')->findByProtocol($entity),它就可以了。但我认为,双向关系的主要目的是避免打开存储库并明确打开新的结果集。

我做错了吗?我该怎么做?

3 个答案:

答案 0 :(得分:3)

我所要做的只是在我的TWIG上打电话给以下人员:

{% for hist in entity.history %}

其他答案都不适合我。我必须直接在我的树枝上调用该属性,而不是使用它的getter。不知道为什么,但它有效。

感谢。

答案 1 :(得分:1)

试试这个:

return $this->render('FunarbeProtocoloAdminBundle:Protocolo:show.html.twig'
    ,array(
          'entity'      => $entity,
         ,'delete_form' => $deleteForm->createView(),
         ,'history'     => $entity->getHistory()->toArray()
                                                ///////////
    )
);

答案 2 :(得分:0)

你的代码很好,我总是把自己的麻烦归咎于我的收藏品而不是把它传递给我。你也可以尝试一下。

呈现代码更改

return $this->render('FunarbeProtocoloAdminBundle:Protocolo:show.html.twig', array(
        'entity'      => $entity,
        'delete_form' => $deleteForm->createView(),
    )
);

您想直接在树枝中访问历史记录。

<强>枝条

{% for hist in entity.getHistory() %}
    <tr>
        <td>{{ hist.dtOcorrencia|date('d/m/Y H:i') }}</td>
        <td>{{ hist.dtRetorno|date('d/m/Y H:i') }}</td>
    </tr>
{% endfor %}

如果更改后的结果相同,请尝试检查数组的hist,它可以嵌套!持久性收藏往往会这样做......

{% for history in entity.getHistory() %}
    {% for hist in history %}
        <tr>
            <td>{{ hist.dtOcorrencia|date('d/m/Y H:i') }}</td>
            <td>{{ hist.dtRetorno|date('d/m/Y H:i') }}</td>
        </tr>
    {% endfor %}
{% endfor %}