php - ORM-ManyToMany 关系中的附加字段

标签 php symfony orm doctrine-orm doctrine

我有以下数据表:用户和组。在我的数据库中,这两个实体之间的关系是 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;
}

集团实体:

/**
 * @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;
}

Symfony 创建了三个表:usersgroupsusers_in_groups。一切都很好,但我想为每个组中的不同用户设置不同的权限。例如:User1 在 Group1 中是管理员,在 Group2 中是标准成员,等等。最好的解决方案是将新字段插入 users_in_groups 但此表是由 @ORM\JoinTable 函数创建的,我不知道我怎样才能做到这一点。你知道这个问题的简单解决方案吗?

最佳答案

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

这是它在您的情况下的工作方式

用户实体:

/**
 * @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;
}

集团实体:

/**
 * @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;
}

用户组实体:

/**
 * @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 


}

关于php - ORM-ManyToMany 关系中的附加字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29087859/

相关文章:

php - MySql - 如何对两列中两个值的组合创建唯一约束

php - 使用 .htaccess 和 mod_rewrite 强制 SSL/https

javascript - AngularJS PUT 与 Symfony2 PUT 方法。更新不起作用

javascript - 用于 Javascript/JSON 的 ORM

php - 如何使用 Amazon SES 配置 msmtp?

php - Laravel 5.4 在 Markdown Mailable 中错误地混合了 HTML 组件

postgresql - 如何通过学说查询 symfony2 模式中的表?

php - 覆盖在 symfony3 中不起作用的翻译器类

java - Spring 数据: @Transactional and propogation

c# - 在使用 ViewModel 或 DTO 而不是 ORM 生成的实体时,如何保留 IQueryable<T> 的优点?