我正在使用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
仍然是空的,因此非常无用。我该如何摆脱它?
答案 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