Я пытаюсь использовать переход doctrine2 и обновление схемы с помощью консоли symfony2. Все мои сущности генерируются без проблем через:
php app/console doctrine:generate:entities myProject
Кроме того, я могу создать свою базу данных и построить свою схему с нуля без проблем, учитывая следующие команды:
php app/console doctrine:database:create
php app/console doctrine:schema:create
Всякий раз, когда я изменяю, удаляю или добавляю в другой объект, я всегда регенерирую свои сущности с помощью:
php app/console doctrine:generate:entities myProject
Однако проблема заключается в том, что когда я хочу обновить свою схему, я всегда получаю следующую ошибку:
[Doctrine\DBAL\DBALException]
An exception occurred while executing 'CREATE INDEX IDX_F7129A80A76ED395 ON
user_user (user_id)':
SQLSTATE[42000]: Syntax error or access violation: 1061 Duplicate key name
'IDX_F7129A80A76ED395'
[PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1061 Duplicate key name
'IDX_F7129A80A76ED395'
Я пробовал делать:
php app/console doctrine:schema:update --force
или
php app/console doctrine:migrations:diff
php app/console doctrine:migrations:migrate
Но я всегда получаю ту же ошибку. Что я делаю не так? Есть ли способ для меня обновить мою базу данных без необходимости уничтожать и строить каждый новый? У меня более 25 объектов, которые состоят из больших файлов со многими ассоциативными сопоставлениями (OneToOne, OneToMany, ManyToMany и т.д.), Которые, как представляется, вызывают проблемы. Любая помощь будет замечательной! Благодарю!
На стороне примечания у меня возникает ощущение, что эта часть кода может вызвать проблему:
/**
* @ORM\ ManyToMany(targetEntity="User", inversedBy="myFriends")
*/
protected $friendsWithMe;
/**
* @ORM\ ManyToMany(targetEntity="User", inversedBy="friendsWithMe")
* @ORM\ JoinTable(name="friends",
* joinColumns={@ORM\ JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\ JoinColumn(name="friend_user_id", referencedColumnName="id")}
* )
**/
protected $myFriends;
В моей пользовательской сущности я хотел создать привязку для многих отношений. Вот как я создаю список друзей. Может быть, что-то не так с моей логикой, но я взял это прямо из документации doctrine2 по ассоциативному сопоставлению.
Не уверен, что это причина исключения, но есть ошибка в вашем ORM-сопоставлении. $ myFriends - это собственная сторона, $ friendsWithMe - обратная сторона, поэтому атрибут inversedBy
должен присутствовать только в $friendsWithMe
.
Попробуйте переписать $myFriends
с атрибутом mappedBy
:
/**
* @ORM\ ManyToMany(targetEntity="User", mappedBy="friendsWithMe")
* @ORM\ JoinTable(name="friends",
* joinColumns={@ORM\ JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\ JoinColumn(name="friend_user_id", referencedColumnName="id")}
* )
**/
protected $myFriends;
php app/console doctrine:schema:update --force