8

问题

我正在使用 Symfony2 和 Doctrine2(注释)设置数据库。我完美地遵循了这些示例(Doctrine2 关系文档),但不知何故,当我更新我的架构(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,因此非常无用。我该如何摆脱它?

4

1 回答 1

14

您的地区实体应使用 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

于 2013-01-15T11:10:52.847 回答