在这个页面上 协会 </跨度> 映射,在manytomany部分有一个例子。但我不明白哪个实体(组或用户)是拥有方。
http://docs.doctrine-project.org/en/2.0.x / reference / 协会 </跨度> -mapping.html#许多一对多双向
我也把代码放在这里
&LT; PHP/** @实体 */类用户{ // …
/ ** * @ManyToMany(targetEntity =“Group”,inversedBy
取自文档:
在一对一的关系中,持有外键的实体 自己的数据库表上的相关实体始终是拥有者 这种关系。 在多对一关系中,默认情况下,多方是拥有方, 因为它持有外键。关系的OneToMany方面是 默认情况下是反向的,因为外键保存在Many侧。一个 OneToMany关系只能是拥有方,如果实现的话 使用与连接表的ManyToMany关系并限制一个 side允许每个数据库约束只有UNIQUE值。
在一对一的关系中,持有外键的实体 自己的数据库表上的相关实体始终是拥有者 这种关系。
在多对一关系中,默认情况下,多方是拥有方, 因为它持有外键。关系的OneToMany方面是 默认情况下是反向的,因为外键保存在Many侧。一个 OneToMany关系只能是拥有方,如果实现的话 使用与连接表的ManyToMany关系并限制一个 side允许每个数据库约束只有UNIQUE值。
现在,我理解ManyToMany有时会让人困惑。
对于多对多关联,您可以选择哪个实体是拥有者,哪个实体是反面。从开发人员的角度来看,有一个非常简单的语义规则来决定哪一方更适合作为拥有方。您只需要问自己,哪个实体负责连接管理,并选择作为拥有方。
以两个实体Article和Tag为例。每当您想要将文章连接到标签时,反之亦然,主要是文章负责这种关系。每当您添加新文章时,您都希望将其与现有标签或新标签相关联。您的createArticle表单可能会支持此概念并允许直接指定标记。这就是为什么你应该选择文章作为拥有方,因为它使代码更容易理解:
<?php class Article { private $tags; public function addTag(Tag $tag) { $tag->addArticle($this); // synchronously updating inverse side $this->tags[] = $tag; } } class Tag { private $articles; public function addArticle(Article $article) { $this->articles[] = $article; } }
这允许在关联的Article侧添加标记:
<?php $article = new Article(); $article->addTag($tagA); $article->addTag($tagB);
所以,简而言之,无论什么对你更有意义。您选择拥有和关系的反面。 :)
资源: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html