繁体   English   中英

Doctrine2中的多对多关系导致迁移中的重复错误

[英]Many-to-many relation in Doctrine2 leads to duplication error in migration

我在基于 Symfony2 框架的项目中创建了两个 Doctrine2 实体。 该实体具有多对多关系。 有我的模型:

/**
 * @ORM\Entity
 * @ORM\Table(name="first")
 */
class First
{
    ...

    /**
     * @var Second[]|Collection
     *
     * @ORM\ManyToMany(targetEntity="MyBundle\Entity\Second", cascade={"detach"})
     * @ORM\JoinTable(name="first_to_second",
     *      joinColumns={@ORM\JoinColumn(name="first_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="second_id", referencedColumnName="id")},
     * )
     */
    private $seconds;

    ...
}

/**
 * @ORM\Entity
 * @ORM\Table(name="second")
 */
class Second
{
    ...

    /**
     * @var First[]|Collection
     *
     * @ORM\ManyToMany(targetEntity="MyBundle\Entity\First", cascade={"remove"})
     * @ORM\JoinTable(name="first_to_second",
     *      joinColumns={@ORM\JoinColumn(name="second_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="first_id", referencedColumnName="id")},
     * )
     */
    private $firsts;

    ...
}

当我尝试进行迁移时

$ php app/console doctrine:migration:diff

有一个错误:

[Doctrine\\DBAL\\Schema\\SchemaException]
名为“first_to_second”的表已经存在。

字段定义错误。 你应该定义JoinTable的关系只有一面(拥有方),并确定哪一方是由mappedByinversedBy

http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#many-to-many-bidirectional

/** @Entity */
class User
{
    // ...

    /**
     * @ManyToMany(targetEntity="Group", inversedBy="users")
     * @JoinTable(name="users_groups")
     */
    private $groups;

    public function __construct() {
        $this->groups = new \Doctrine\Common\Collections\ArrayCollection();
    }

    // ...
}

/** @Entity */
class Group
{
    // ...
    /**
     * @ManyToMany(targetEntity="User", mappedBy="groups")
     */
    private $users;

    public function __construct() {
        $this->users = new \Doctrine\Common\Collections\ArrayCollection();
    }

    // ...
}

5.9.1. 多对多关联的拥有方和反向方

对于多对多关联,您可以选择哪个实体是拥有的,哪个是相反的。 从开发者的角度来看,有一个非常简单的语义规则来决定哪一方更适合作为拥有方。 您只需要问自己,哪个实体负责连接管理并选择它作为拥有方。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM