与我以前的帖子有关:
symfony2 onetomany关系
我想将此功能添加到我的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 %}
首先,关于您的第一个链接(从现在开始,您应该在一个帖子中发布所有问题/问题,而不是创建多个链接,并且如果您有东西要添加/删除,您可以编辑您的帖子),您无法正确设置关系:
在Advert
类中,您缺少一些基本方法。为此,运行
$ php app/console doctrine:generate:entities SocietyPerfclientBundle:Advert
让学说为您生成缺失的方法。AdvertReader
实体相同。
最后,您必须具有Advert
实体中$readers
字段的实例化。类似:
$this->readers = new DoctrineCommonCollectionsArrayCollection();
以及这些方法:addReader(AdvertReader $reader)
,removeReader(AdvertReader $reader)
和getReaders()
。
在AdvertReader
实体中,您只需要具有setAdvert(Advert $advers)
和getAdvert()
。
尝试一下,让我们知道是否有效。
您将包含您的广告数据的模板$ litchadvert提供给您。为了在视图中显示它,您必须使用它,而不是直接使用实体的名称
{% for reader in listAdverts.readers %}
<i>Seen by : {{ reader.username }}</i>
{% endfor %}
修复控制器
$listAdverts = $this->getDoctrine()
->getManager()
->getRepository('SocietyPerfclientBundle:Advert')
->findAll()
;