2012-08-01 123 views
1

过去几个小时,我一直在为这个问题苦苦挣扎,一直未能找到任何东西。获取FOSUserBundle组的用户(Symfony2)

我已经配置了FOSUserBundle并让组正确激活并正常工作。但是,用户组关系定义为User类如下:

/** 
* @ORM\ManyToMany(targetEntity="Netlabs\UserBundle\Entity\Group") 
* @ORM\JoinTable(name="fos_user_user_group", 
*  joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")} 
*) 
*/ 
protected $groups; 

,并在组类,我甚至不具有定义的$用户列表。我尝试了很多“正常”的东西,比如在我的Group类中创建一个$ users变量,并将其定义为与User对象的关系,但它与FOSUserBundle并不搭配(每次创建一个新表来创建关系,当已经有一个时)。例如:

/** 
* @ORM\ManyToMany(targetEntity="Netlabs\UserBundle\Entity\Group", inversedBy="groups", cascade={"all"}) 
* 
*/ 
protected $users; 

有什么建议吗?

同样,我的主要目标是:我希望能够做到集团 - > getUsers()

回答

1

在组类,您targetEntity必须是用户,而不是集团。此外,尝试为$ groups属性添加inversedBy规则,并为$ users的mappedBy添加修改inversedBy。

/** 
* @ORM\ManyToMany(targetEntity="Netlabs\UserBundle\Entity\Group", inversedBy="users") 
* @ORM\JoinTable(name="fos_user_user_group", 
*  joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")} 
*) 
*/ 
protected $groups; 

而且

/** 
* @ORM\ManyToMany(targetEntity="Netlabs\UserBundle\Entity\User", mappedBy="groups") 
* 
*/ 
protected $users; 
+0

修改代码以您的建议和运行后“的信条:生成:实体”和“学说:模式:更新--force”,它仍然会创建一个新表“ group_user“,而不是使用它应该的”fos_user_user_group“。 – JoshuaWohle 2012-08-02 09:52:46

+0

使用ManyTo§any关系时,您必须创建一个新表。这是保存对象之间关系的唯一方法。 – 2012-08-02 09:55:15

+0

我知道,但是FOSUserBundle已经创建了一个名为“fos_user_user_group”的表格,它满足了这个目的。应该只有一个表,而不是2. – JoshuaWohle 2012-08-02 10:06:04

相关问题