Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php ORM多个关系中的附加字段_Php_Symfony_Orm_Doctrine Orm_Doctrine - Fatal编程技术网

Php ORM多个关系中的附加字段

Php ORM多个关系中的附加字段,php,symfony,orm,doctrine-orm,doctrine,Php,Symfony,Orm,Doctrine Orm,Doctrine,我有以下数据表:用户和组。在我的数据库中,这两个实体之间的关系是很多的,因为许多用户可以在许多组中,并且许多组可以有许多用户。这很简单。我创建了此代码,它可以工作: 用户实体: /** * @ORM\Entity * @ORM\Table(name="users") */ class User extends BaseUser { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedV

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

用户实体:

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


}
集团实体:

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


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

看一下

为什么多对多关联不那么常见?因为您经常希望将其他属性与关联关联起来,在这种情况下,您将引入一个关联类。因此,直接多对多关联消失,并被3个参与类之间的一对多/多对一关联所取代

换句话说,只要您想要关系表上的属性,它就不再只是一个关系表。它需要它自己的实体。新实体现在与用户和组建立一对多/多对一关系

然后可以在新实体中使用该功能


过去关于这个主题的一些讨论:

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

这是在你的情况下它是如何工作的

用户实体:

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


}
集团实体:

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


}
用户组实体:

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


}

非常感谢你。一切都很明显。我知道这是一个老话题,但对于任何寻找文档的人(旧链接不再有效):