Решение Доктрина Ошибка: Таблица с именем yourtable.tablename уже существует

Если вы работаете над каким-то PHP-проектом, основанным на Symfony, или для сборки которого используется Doctrine ORM, и вы не можете создать таблицы в MySQL с помощью следующей команды:

php bin/console doctrine:schema:update --force

Вы вероятно волнуетесь в этот момент, потому что не знаете, как решить это, не так ли? Ну, в этой статье мы дадим вам несколько советов, которые могут помочь вам справиться с этой проблемой.

Возможная причина № 1

В большинстве случаев и, вероятно, для вашего проекта, эта ошибка вызвана тем, что у вас есть 2 сущности и файлы orm для той же таблицы в вашем проекте, и они, вероятно, находятся в разных пакетах, например:

/AppBundle/Entity/Table.php
/AppBundle/Resources/config/doctrine/Table.orm.yml
# Somewhere else in other bundle of your app
/OtherBundle/Entity/Table.php
/OtherBundle/Resources/config/doctrine/Table.orm.yml

Обратите внимание, что в зависимости от того, как вы работаете, вы можете использовать сопоставление не с файлом orm.yml, а с аннотациями в ваших сущностях. Поэтому все, что вам нужно, это отследить дублирующуюся сущность и удалить их (вы можете изменить имя) и, наконец, попытаться обновить схему с помощью команды еще раз. Очевидно, потому что доктрина не будет создавать одну и ту же таблицу дважды, будет выдано это исключение.

В этом случае причина в том, что используется обратный инжиниринг с доктриной, что, очевидно, не так, но в этом случае создаются файлы, которые вы, вероятно, не знали, были созданы. Выявить эту проблему еще сложнее, если вы не используете контрольную версию в своих проектах.

Возможная причина № 2

Если вы проверили, что ваша таблица действительно не создается дважды, потому что в таблице 2 сущности или orm-файла, вам нужно будет проверьте отношение «один ко многим», однонаправленное с таблицей соединений, например аннотации в вашем проекте, потому что вы, возможно, изменили вручную один из этих файлов, и вы сделали это, как видите, неправильно.

Поскольку эта проблема полностью зависит от того, как вы работаете с вашим проектом, мы не можем вам в этом помочь, поэтому вам нужно будет внимательно прочитать и проанализировать структуру вашей базы данных и правильно переписать отношения. Если вы все еще столкнулись с проблемой, то мы рекомендуем вам создать вопрос о переполнении стека и предоставить всю информацию о ваших сущностях, файлах orm, и, возможно, кто-то сможет помочь вам в этом.

Да пребудет с тобой сила !

Ссылка на основную публикацию
Adblock
detector