Doctrine2为ManyToMany关系生成两个额外的表

时间:2013-01-15 11:09:20

标签: php mysql symfony doctrine-orm

问题

我正在使用Symfony2和Doctrine2(注释)设置数据库。我完美地跟踪了这些示例(Doctrine2 relationship documentation),但是当我更新我的架构(doctrine:schema:update --force)时,它会创建另外两个表。

我的两个实体是文章和区,代码如下。

代码

文章实体:

/**
 *
 * @var \Doctrine\Common\Collections\ArrayCollection $districts
 *
 * @ORM\ManyToMany(targetEntity="District", inversedBy="articles")
 * @ORM\JoinTable(name="articles_districts",
 *     joinColumns={@ORM\JoinColumn(name="article_id", referencedColumnName="id")},
 *     inverseJoinColumns={@ORM\JoinColumn(name="district_id", referencedColumnName="id")}
 * )
 */
protected $districts;

地区实体:

/**
 *
 * @var \Doctrine\Common\Collections\ArrayCollection $articles
 * @ORM\ManyToMany(targetEntity="Article", inversedBy="districts")
 */
protected $articles;

问题

正在创建的两个额外表是:articles_districts(我在JoinTable部分中指定的那个)和article_district(另一个以某种方式自动创建)。

articles_districts表按预期工作,并在创建新条目时插入ID。 article_district仍然是空的,因此非常无用。我该如何摆脱它?

1 个答案:

答案 0 :(得分:13)

您的分区实体应使用mappedBy注释:

/**
 *
 * @var \Doctrine\Common\Collections\ArrayCollection $articles
 * @ORM\ManyToMany(targetEntity="Article", mappedBy="districts")
 */
protected $articles;

目前,您正尝试为实体关系设置两个拥有方:http://docs.doctrine-project.org/en/2.0.x/reference/association-mapping.html#many-to-many-bidirectional