doctrine: migrations: diff генерирует 2 таблицы вместо одной для отношения ManyToMany - PullRequest
1 голос
/ 25 января 2012

У меня есть две сущности: product и tag, связанные отношением «многие ко многим».

Вот часть Product сущности:

/**
 * @ORM\ManyToMany(targetEntity="Tag", inversedBy="products")
 * @ORM\JoinTable(name="product_tag")
 *
 * @var \Doctrine\Common\Collections\ArrayCollection
 */
private $tags;

и аналогичные в Tag:

/**
 * @ORM\ManyToMany(targetEntity="Product", inversedBy="tags")
 *
 * @var ArrayCollection
 */
 private $products;

Проблема в том, что когда я генерирую миграцию, используя php app/console doctrine:migrations:diff, я получаю сгенерированные product_tag и tag_product. Пока ожидаю получить только первый.

Что я сделал не так?

1 Ответ

4 голосов
/ 25 января 2012

Взято из документации Doctrine ( Сопоставление связей > Сторона владения и обратная сторона ):

Обратная сторона двунаправленного отношения должна относиться кего собственная сторона, используя атрибут mappedBy [...] объявления отображения ManyToMany.Атрибут mappedBy обозначает поле в объекте, который является владельцем отношения.

Сторона-владелец двунаправленного отношения должна ссылаться на свою обратную сторону путем использования атрибута inversedBy [...] ManyToManyкартографическая декларация.Атрибут inversedBy обозначает поле в объекте, которое является обратной стороной отношения.

В принципе, вы не можете использовать inversedBy в обоих объектах.Вы должны использовать его на собственной стороне . mappedBy следует использовать на другой стороне.

Чтение: Выбор владельца и обратной стороны

...