ORM-ManyToMany 关系中的附加字段

Zaq*_*uPL 5 php orm doctrine symfony doctrine-orm

我有以下数据表:用户和组。在我的数据库中,这两个实体之间的关系是 ManyToMany,因为许多用户可以在许多组中,许多组可以有许多用户。这很简单。我创建了这段代码并且它有效:

用户实体:

/**
 * @ORM\Entity
 * @ORM\Table(name="users")
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\ManyToMany(targetEntity="Group", inversedBy="users")
     * @ORM\JoinTable(name="users_in_groups")
     */
    protected $groups;
}
Run Code Online (Sandbox Code Playgroud)

集团实体:

/**
 * @ORM\Entity
 * @ORM\Table(name="groups")
 */
class Group
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\ManyToMany(targetEntity="User", mappedBy="groups")
     */
    protected $users;
}
Run Code Online (Sandbox Code Playgroud)

Symfony 创建了三个表:users,groups和users_in_groups. 一切正常,但我想为每个组中的不同用户设置不同的权限。例如:User1 是 Group1 中的 admin 和 Group2 中的标准成员等。最好的解决方案可能是插入新字段,users_in_groups但该表是由 @ORM\JoinTable 函数创建的,我不知道我该怎么做。你知道这个问题的简单解决方案吗?

Kha*_*umi 4

我发现的最简单的方法是使用第三个实体

以下是它在您的情况下的工作原理

用户实体:

/**
 * @ORM\Entity
 * @ORM\Table(name="users")
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

   /**
     * @ORM\OneToMany(targetEntity="UserGroup", mappedBy="user")
     * */
    protected $usergroup;
}
Run Code Online (Sandbox Code Playgroud)

集团实体:

/**
 * @ORM\Entity
 * @ORM\Table(name="groups")
 */
class Group
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
      * @ORM\OneToMany(targetEntity="UserGroup" , mappedBy="group"})
     * */
    protected $usergroup;
}
Run Code Online (Sandbox Code Playgroud)

用户组实体:

/**
 * @ORM\Entity
 * @ORM\Table(name="user_group")
 */
class UserGroup
{

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     *
     * @var integer $id
     */
    protected $id;


    /**
     * @ORM\ManyToOne(targetEntity="User", inversedBy="usergroup")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     * */
    protected $user;

    /**
     * @ORM\ManyToOne(targetEntity="Group", inversedBy="usergroup")
     * @ORM\JoinColumn(name="group_id", referencedColumnName="id")
     * */
    protected $group;


    // Additional fields, Getter, Setters, _Construct, __toString 


}
Run Code Online (Sandbox Code Playgroud)