вот моя проблема:
У меня есть абстрактный класс с именем 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;
Этот код мне кажется довольно правильным, но когда я пытаюсь обновить схему базы данных, это приводит к ошибке:
Я надеюсь, что кто-нибудь может помочь мне понять, что не так с моим кодом, спасибо!
@FrankB Я не копировал файл, и я уверен на 100%, что у меня нет другой таблицы с указанным именем, я попытался изменить имя таблицы с помощью некоторых случайных строк, все еще возникла та же проблема.
Попробуйте выполнить команду проверки «bin / console doctrine: schema: validate», чтобы проверить, выдает ли она какие-либо ошибки, кроме того, что база данных еще не синхронизирована с объектами.




Проблема вызвана тем, что сценарий обновления схемы доктрины пытается выполнить создать "присоединиться" 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/…). Вот что я изменил для тех, у кого похожая проблема: Код
команда сканирует все сущности в вашем проекте в каталоге сущностей, скопировали ли вы файл и, возможно, у вас есть две сущности с одинаковым именем таблицы?