2016-02-22 144 views
0

我有许多tomany关系的问题。我有两个实体,活动(这是拥有方)和用户(它扩展了FOSUserBundle)。显示manytomany关系

这是一个双向的ManyToMany关系,当我创建新的广告系列时,我将一个条目添加到名为users_campaigns的表中。

我的问题是,在用户的个人资料页面上,我想显示与他有关的所有活动。

我overrided与此FOSUB树枝模板:

{% trans_default_domain 'FOSUserBundle' %} 

<div class="panel panel-default"> 

<div class="panel-heading"> 
    {{ 'profile.show.username'|trans }} 
</div> 
<div class="panel-body"> 
    {{ user.username }} 
</div> 

<div class="panel-heading"> 
    {{ 'profile.show.email'|trans }} 
</div> 
<div class="panel-body"> 
    {{ user.email }} 
</div> 

<div class="panel-heading"> 
    {{ 'profile.show.lastlogin'|trans }} 
</div> 
<div class="panel-body"> 
    {{ user.lastlogin|date('Y-m-d H:i:s') }} 
</div> 

<div class="panel-heading"> 
    {{ 'profile.show.campaigns'|trans }} 
</div> 
<div class="panel-body"> 
    {% if user.campaigns is defined %} 
     {% for campaign in user.campaigns %} 
      {{ campaign.name }} 
     {% endfor %} 
    {% endif %} 
</div> 

我也overrided的ProfileController可,并尝试一些事情,但我没能显示该活动。

有没有人有任何想法?

编辑:关系:

/** 
* @ORM\ManyToMany(targetEntity="User", inversedBy="campaigns" , cascade={"all"}) 
* @ORM\JoinTable(name="users_campaigns") 
*/ 
private $players; 

和:

/** 
* ORM\ManyToMany(targetEntity="Campaign", mappedBy="players", cascade={"all"}) 
*/ 
protected $campaigns; 

编辑2: 下面是从用户类的构建体。

public function __construct() 
{ 
    parent::__construct(); 
    $this->campaigns = new \Doctrine\Common\Collections\ArrayCollection(); 
} 

这里是广告系列的吸气剂:

/** 
* @return ArrayCollection 
*/ 
public function getCampaigns() 
{ 
    return $this->campaigns; 
} 
+0

告诉我们您创建的关系 – kamwoz

+0

FOSUserBundle只是一个便利,您需要利用Doctrine Entities并为它们设置映射。 –

+0

我编辑了帖子并添加了关系。正如你所看到的,我使用实体并在它们之间建立了关系。 –

回答

0

答案是如此愚蠢......

在我的代码,一遍又一遍看后,我看到了注解在用户类中,在行的开始处缺少@的广告系列。

我写

ORM\ManyToMany(targetEntity="Campaign", mappedBy="players", cascade={"all"}) 

,而不是

@ORM\ManyToMany(targetEntity="Campaign", mappedBy="players", cascade={"all"}) 

向大家道歉,并感谢您想帮助我。