Symfony3 - двунаправленное дублирование таблицы "многие ко многим"

вот моя проблема:

У меня есть абстрактный класс с именем UserBase, который расширяет все мои пользователи-сущности:

/**
* Class UserBase
* @ORM\MappedSuperclass()
*/
abstract class UserBase implements UserInterface, \JsonSerializable {

/**
 * @var int
 *
 * @ORM\Column(name = "id", type = "integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy = "AUTO")
 */
private $id;

....

В этой сущности существует двунаправленная связь «многие-ко-многим» между сущностью с именем ChatConversation:

 /**
 * @var \Doctrine\Common\Collections\ArrayCollection
 *
 * @ORM\ManyToMany(
 *     targetEntity = "AppBundle\Entity\ChatConversation",
 *     inversedBy = "users"
 * )
 * @ORM\JoinTable(
 *     name = "chat_user_conversation",
 *     joinColumns = {@ORM\JoinColumn(name = "user_id", referencedColumnName = "id")},
 *     inverseJoinColumns = {@ORM\JoinColumn(name = "conversation_id", referencedColumnName = "id")}
 * )
 */
private $conversations;

ChatConversation класс:

class ChatConversation {
/**
 * @var int
 *
 * @ORM\Column(name = "id", type = "integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy = "AUTO")
 */
private $id;

/**
 * @var \Doctrine\Common\Collections\ArrayCollection
 *
 * @ORM\ManyToMany(
 *     targetEntity = "AppBundle\Entity\UserBase",
 *     mappedBy = "conversations"
 * )
 */
private $users;

Этот код мне кажется довольно правильным, но когда я пытаюсь обновить схему базы данных, это приводит к ошибке:

Ошибка консоли

Я надеюсь, что кто-нибудь может помочь мне понять, что не так с моим кодом, спасибо!

команда сканирует все сущности в вашем проекте в каталоге сущностей, скопировали ли вы файл и, возможно, у вас есть две сущности с одинаковым именем таблицы?

Frank B 16.06.2018 01:50

@FrankB Я не копировал файл, и я уверен на 100%, что у меня нет другой таблицы с указанным именем, я попытался изменить имя таблицы с помощью некоторых случайных строк, все еще возникла та же проблема.

iGoDLiK3 16.06.2018 01:54

Попробуйте выполнить команду проверки «bin / console doctrine: schema: validate», чтобы проверить, выдает ли она какие-либо ошибки, кроме того, что база данных еще не синхронизирована с объектами.

Yosra Hamza 16.06.2018 05:28
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
3
61
1

Ответы 1

Проблема вызвана тем, что сценарий обновления схемы доктрины пытается выполнить создать "присоединиться" chat_user_conversation для каждого подкласса, расширяющий UserBase.

Чтобы преодолеть это, вы можете использовать Переопределение ассоциации в определении ваших сущностей.

/**
 * @ORM\Entity
 * @ORM\AssociationOverrides({
 *      @ORM\AssociationOverride(name = "conversations",
 *          joinTable=@ORM\JoinTable(
 *              name = "chat_user_conversation",
 *              joinColumns = {@ORM\JoinColumn(name = "user_id", referencedColumnName = "id")},
 *     inverseJoinColumns = {@ORM\JoinColumn(name = "conversation_id", referencedColumnName = "id")}
 *          )
 *      )
 * })
 */
class Admin extends UserBase
{
}

Спасибо за ответ, я решил проблему, добавив наследование таблицы классов к моему основному классу (например, doctrine-project.org/projects/doctrine-orm/en/2.6/reference/‌…). Вот что я изменил для тех, у кого похожая проблема: Код

iGoDLiK3 17.06.2018 21:23

Другие вопросы по теме