获取 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)的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2:使用 FOSUserBundle 时如何在控制器内获取用户对象?

获取用户列表时发生 SonataUserBundle 错误

使用 FosUserBundle 创建管理员用户

在 FOSUserBundle 中管理用户/角色/组

FOSUserBundle 未配置编码器:创建新用户

使用 FOSUserBundle 创建新用户失败