首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Doctrine2中的多对多关系会导致迁移中的复制错误。

Doctrine2中的多对多关系会导致迁移中的复制错误。
EN

Stack Overflow用户
提问于 2015-12-17 06:57:21
回答 1查看 715关注 0票数 2

我在基于Doctrine2框架的项目中创建了两个Symfony2实体。这个实体有着多到多的关系。这是我的模特:

代码语言:javascript
复制
/**
 * @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;

    ...
}

当我试图移民时

代码语言:javascript
复制
$ php app/console doctrine:migration:diff

有一个错误:

原则\DBAL\Schema\SchemaException 名为“first_to_second”的表已经存在。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-17 07:50:19

字段定义是错误的。您应该只定义关系的一侧(拥有方),并通过JoinTableinversedBy来定义哪一方是哪一方。

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

代码语言:javascript
复制
/** @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.ManyToMany关联中的拥有和逆侧 对于多到多的关联,您可以选择哪个实体是所有者,哪个是相反的方面。从开发人员的角度来看,有一个非常简单的语义规则来决定哪一方更适合作为拥有方。您只需问自己,哪个实体负责连接管理,并选择它作为拥有方。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34328441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档