Reputation: 1663
I have declared a ManyToMany relation between 2 entities, and when I use doctrine:migrations:diff, it tries to create the table twice and throws an exception "The table with name 'incompass.surgerysurgeryside' already exists"
This is the annotation that I have used:
Surgery.php
/**
* @ORM\ManyToMany(targetEntity="Incompass\SurgeryBundle\Entity\SurgerySide", inversedBy="surgeries")
* @ORM\JoinTable(name="SurgerySurgerySide",
* joinColumns={@ORM\JoinColumn(name="surgery_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="surgery_side_id", referencedColumnName="id")}
* )
*/
protected $surgery_sides;
SurgerySide.php
/**
* @ORM\ManyToMany(targetEntity="Incompass\SurgeryBundle\Entity\Surgery", inversedBy="surgery_sides")
* @ORM\JoinTable(name="SurgerySurgerySide",
* joinColumns={@ORM\JoinColumn(name="surgery_side_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="surgery_id", referencedColumnName="id")}
* )
*/
protected $surgeries;
(NB The answers here don't answer the actual question Doctrine many-to-many relationship wants to create a table twice when I create a migration)
Upvotes: 2
Views: 1156
Reputation: 24280
Try removing inversedBy
or use once inversedBy
and once mappedBy
.
/**
* @ORM\ManyToMany(targetEntity="Incompass\SurgeryBundle\Entity\SurgerySide", inversedBy="surgeries")
*/
protected $surgery_sides;
/**
* @ORM\ManyToMany(targetEntity="Incompass\SurgeryBundle\Entity\Surgery", mappedBy="surgery_sides")
*/
protected $surgeries;
Doctrine guesses how to name table, usually with priority <firstEntity>_<secondEntity>
. Since both are inversedBy
, Doctrine doesn't know, which to use the second, thus creates two tables.
Upvotes: 2