【问题标题】:Doctrine2 generates two extra tables for a ManyToMany relationshipDoctrine2 为多对多关系生成两个额外的表
【发布时间】:2012-12-29 11:24:02
【问题描述】:

问题

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

我的两个实体是 Article 和 District,代码如下。

代码

文章实体:

/**
 *
 * @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 仍然是空的,因此毫无用处。我该如何摆脱它?

【问题讨论】:

    标签: php mysql symfony doctrine-orm


    【解决方案1】:

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

    【讨论】:

    • 非常感谢卢克,成功了!猜猜我毕竟没有完全按照这个例子:)
    • 很容易错过!请您接受答案,以便人们知道它的正确性:)
    • 我会尽快接受答案,你的回答太快了,我不能马上标记它!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    相关资源
    最近更新 更多