我在基于Doctrine2框架的项目中创建了两个Symfony2实体。这个实体有着多到多的关系。这是我的模特:
/**
* @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有一个错误:
原则\DBAL\Schema\SchemaException 名为“first_to_second”的表已经存在。
发布于 2015-12-17 07:50:19
字段定义是错误的。您应该只定义关系的一侧(拥有方),并通过JoinTable和inversedBy来定义哪一方是哪一方。
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.ManyToMany关联中的拥有和逆侧 对于多到多的关联,您可以选择哪个实体是所有者,哪个是相反的方面。从开发人员的角度来看,有一个非常简单的语义规则来决定哪一方更适合作为拥有方。您只需问自己,哪个实体负责连接管理,并选择它作为拥有方。
https://stackoverflow.com/questions/34328441
复制相似问题