获取 FOSUserBundle 组的用户 (Symfony2)
Posted
技术标签:
【中文标题】获取 FOSUserBundle 组的用户 (Symfony2)【英文标题】:Getting the users of an FOSUserBundle Group (Symfony2) 【发布时间】:2012-08-01 22:23:20 【问题描述】:在过去的几个小时里,我一直在为这个问题苦苦挣扎,但找不到任何东西。
我已配置 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 类中,我什至没有定义 $user 列表。我尝试了很多“正常”的事情,比如在我的 Group 类中创建一个 $users 变量并定义它与 User 对象的关系,但它与 FOSUserBundle 的关系并不好(每次,它都会创建一个新表来创建关系,当已经有一个时)。例如:
/**
* @ORM\ManyToMany(targetEntity="Netlabs\UserBundle\Entity\Group", inversedBy="groups", cascade="all")
*
*/
protected $users;
有什么建议吗?
再次,我的主要目标是:我希望能够做 Group->getUsers()
【问题讨论】:
【参考方案1】:在您的 Group 类中,您的 targetEntity 必须是 User 而不是 Group。此外,尝试为 $groups 属性添加 inversedBy 规则,并在 mappedBy 中为 $users 修改 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;
【讨论】:
根据您的建议修改代码并运行“doctrine:generate:entities”和“doctrine:schema:update --force”后,它仍然创建一个新表“group_user”,而不是使用它应该的“fos_user_user_group”。 对于 ManyTo§any 关系,您必须创建一个新表。这是保存对象之间关系的唯一方法。 我知道,但是 FOSUserBundle 已经创建了一个名为“fos_user_user_group”的表,它完全满足了这个目的。应该只有 1 个表,而不是 2 个。 您是否尝试在 $users 属性上方添加 @ORM\JoinTable(name="fos_user_user_group") ? 不正是你想做的事吗? Click以上是关于获取 FOSUserBundle 组的用户 (Symfony2)的主要内容,如果未能解决你的问题,请参考以下文章