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;
}