显示多对多关系
Display manytomany relationship
我对多对多关系有疑问。我有两个实体,活动(拥有方)和用户(扩展 FOSUserBundle)。
这是一个双向多对多关系,当我创建一个新的活动时,我将一个条目添加到名为 users_campaigns 的 table。
我的问题是,在用户的个人资料页面上,我想显示与他相关的所有活动。
我用这个覆盖了 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>
我还覆盖了 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:
这是用户 class.
的构造
public function __construct()
{
parent::__construct();
$this->campaigns = new \Doctrine\Common\Collections\ArrayCollection();
}
这里是活动的 getter:
/**
* @return ArrayCollection
*/
public function getCampaigns()
{
return $this->campaigns;
}
答案太蠢了...
在反复查看我的代码后,我发现用户 class 中的活动注释在该行的开头缺少 @。
我写了
ORM\ManyToMany(targetEntity="Campaign", mappedBy="players", cascade={"all"})
而不是
@ORM\ManyToMany(targetEntity="Campaign", mappedBy="players", cascade={"all"})
向大家致歉,感谢大家的帮助。
我对多对多关系有疑问。我有两个实体,活动(拥有方)和用户(扩展 FOSUserBundle)。
这是一个双向多对多关系,当我创建一个新的活动时,我将一个条目添加到名为 users_campaigns 的 table。
我的问题是,在用户的个人资料页面上,我想显示与他相关的所有活动。
我用这个覆盖了 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>
我还覆盖了 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: 这是用户 class.
的构造 public function __construct()
{
parent::__construct();
$this->campaigns = new \Doctrine\Common\Collections\ArrayCollection();
}
这里是活动的 getter:
/**
* @return ArrayCollection
*/
public function getCampaigns()
{
return $this->campaigns;
}
答案太蠢了...
在反复查看我的代码后,我发现用户 class 中的活动注释在该行的开头缺少 @。
我写了
ORM\ManyToMany(targetEntity="Campaign", mappedBy="players", cascade={"all"})
而不是
@ORM\ManyToMany(targetEntity="Campaign", mappedBy="players", cascade={"all"})
向大家致歉,感谢大家的帮助。