Symfony2多对多关系共享一个JoinTable

Symfony2多对多关系共享一个JoinTable,symfony,doctrine-orm,many-to-many,Symfony,Doctrine Orm,Many To Many,我想建立一个多对多关系,它共享同一个联接表。我尝试了以下方法: <?php /** @Entity **/ class User { // ... /** * @ManyToMany(targetEntity="Group", inversedBy="users") * @JoinTable(name="users_groups") **/ private $groups; // ... } /** @Entity **/ class Group { // ... /** *

我想建立一个多对多关系,它共享同一个联接表。我尝试了以下方法:

<?php
/** @Entity **/
class User
{
// ...

/**
 * @ManyToMany(targetEntity="Group", inversedBy="users")
 * @JoinTable(name="users_groups")
 **/
private $groups;

// ...
}

/** @Entity **/
class Group
{
// ...
/**
 * @ManyToMany(targetEntity="User", mappedBy="groups")
 * @JoinTable(name="users_groups")
 **/
private $users;

// ...
}
如何创建共享同一个表“用户组”的多对多关系

注意:我知道我可以删除
@JoinTable(name=“users\u groups”)
,但当我这样做时,我不再与两个拥有方有多对多关系。相反,只有一方(拥有方)知道联接表。

从属于
组的反向侧实体中删除
@JoinTable(name=“users\u groups”)
注释,一旦拥有方实体具有映射信息,则无需在反向侧实体中再次定义,与您的问题相关的一些关键点

反向侧必须使用OneTONE的mappedBy属性, 一对多或多对多映射声明。mappedBy属性 包含拥有方关联字段的名称

拥有方必须使用OneToOne的inversedBy属性, ManyToOne或ManyToMany映射声明。属性倒置 包含反向侧关联字段的名称

您可以自己选择多对多关联的拥有方

参考文献

看 来自文档的示例


谢谢你的回答。这是通过创建一个拥有方和一个反向方来实现的,但是,我希望能够创建两个拥有方。上面的注释允许我这样做,但当我更新SQL时,它会尝试创建两次联接表,这会引发上面的错误。文档中提到了创建一个拥有两个拥有方的多对多,但没有详细说明。@MarcelTjandraatmadja将有一个拥有方和一个反向拥有方两个实体都不能拥有方,也从文档中可以看出,条令只会检查关联的拥有方是否有变化,请参见第四点。那么,我怎样才能使它们在更新时自动更新联接表呢?例如,将组添加到用户或将用户添加到组时。我在此处发现了一个完全相同的问题:。但解决方法似乎有点难看。@MarcelTjandraatmadja原则会注意自己,您只需要为示例实现其方法答案
[Doctrine\DBAL\Schema\SchemaException]                           
  The table with name 'postgres.user_groups' already exists. 
class Group
{

    /**
     * @ManyToMany(targetEntity="User", mappedBy="groups")
     **/
    private $users;

}