Symfony2 OneToMany关系

时间:2017-09-01 13:40:20

标签: symfony doctrine-orm

与我以前的帖子相关:

Symfony2 OneToMany relation

我想将此功能添加到我的infoAction();谁列出了所有的广告。

    public function infoAction()
{
    $listAdverts = $this->getDoctrine()
        ->getManager()
        ->getRepository('SocietyPerfclientBundle:Advert')
        ->getAdverts()
    ;

    return $this->render('SocietyPerfclientBundle:Default:info.html.twig', array(
        'listAdverts' => $listAdverts,
    ));
}

我必须在此处访问以下内容:

{% for reader in advert.readers %} <i>Seen by : {{ reader.username }}</i> {% endfor %}

2 个答案:

答案 0 :(得分:1)

首先,关于你的第一个链接(从现在开始,你应该在一个帖子中发布所有问题/问题,而不是创建多个问题/链接,如果你有东西可以添加/删除,你可以编辑你的帖子),你没有正确设置关系:

在课程Advert中,您缺少一些基本方法。为此,运行

$ php app/console doctrine:generate:entities SocietyPerfclientBundle:Advert

让doctrine为您生成缺少的方法。 AdvertReader实体也是如此。

最后,您必须在$readers实体中对Advert字段进行实例化。类似的东西:

$this->readers = new \Doctrine\Common\Collections\ArrayCollection();

以及这些方法:addReader(AdvertReader $reader)removeReader(AdvertReader $reader)getReaders()

AdvertReader实体中,您只需拥有setAdvert(Advert $advers)getAdvert()

尝试一下,让我们知道是否有效。

答案 1 :(得分:0)

您提供的模板$ listAdvert包含您的广告数据。 要在视图中显示它,您必须使用它而不是直接使用您的实体名称

{% for reader in listAdverts.readers %}
    <i>Seen by : {{ reader.username }}</i>
 {% endfor %}

修复控制器

$listAdverts = $this->getDoctrine()
        ->getManager()
        ->getRepository('SocietyPerfclientBundle:Advert')
        ->findAll()
    ;