Ошибка миграции Symfony - PullRequest
0 голосов
/ 13 мая 2011

Я только что изменил свою схему для проекта Symfony, над которым я работаю (добавил таблицу и несколько столбцов) и выполнил следующие две команды:

php symfony doc:generate-migrations-diff
php symfony doc:migrate

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

  The following errors occurred:                                                                                                                                                                                                                                                                                           

   - SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'media_images' already exists. Failing Query: "CREATE TABLE media_images (id INT UNSIGNED AUTO_INCREMENT, name VARCHAR(255), start_date DATE, end_date DATE, website VARCHAR(255), location TEXT, description TEXT, PRIMARY KEY(id)) ENGINE = INNODB"  
   - SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'company_type'. Failing Query: "ALTER TABLE bio ADD company_type VARCHAR(255)"                                                                                                                                                                     
   - SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'company'. Failing Query: "ALTER TABLE bio ADD company VARCHAR(255)"                                                                                                                                                                               
   - SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'company_type'. Failing Query: "ALTER TABLE bio ADD company_type VARCHAR(255)"                                                                                                                                                                     
   - SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'company'. Failing Query: "ALTER TABLE bio ADD company VARCHAR(255)"                                                                                                                                                                               
   - SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'media_events' already exists. Failing Query: "CREATE TABLE media_events (id INT UNSIGNED AUTO_INCREMENT, name VARCHAR(255), start_date DATE, end_date DATE, website VARCHAR(255), location TEXT, description TEXT, PRIMARY KEY(id)) ENGINE = INNODB"  
   - SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'company_type'. Failing Query: "ALTER TABLE bio ADD company_type VARCHAR(255)"                                                                                                                                                                     
   - SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'company'. Failing Query: "ALTER TABLE bio ADD company VARCHAR(255)"                                                                                                                                                                               
   - SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'media_events' already exists. Failing Query: "CREATE TABLE media_events (id INT UNSIGNED AUTO_INCREMENT, name VARCHAR(255), start_date DATE, end_date DATE, website VARCHAR(255), location TEXT, description TEXT, PRIMARY KEY(id)) ENGINE = INNODB"  
   - SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'company_type'. Failing Query: "ALTER TABLE bio ADD company_type VARCHAR(255)"                                                                                                                                                                     
   - SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'company'. Failing Query: "ALTER TABLE bio ADD company VARCHAR(255)"             

В основном это сбивает с толку, потому что он сообщает об одной и той же ошибке несколько раз. Я удалил файлы /tmp/doctrine_schema_[random_number].yml и попытался снова, но не повезло. Я также вызвал консоль mysql и вручную удалил таблицы и столбцы, на которые он жалуется, но все равно выдает ту же ошибку.

Есть идеи?

1 Ответ

6 голосов
/ 13 мая 2011

Когда что-то мешает с миграциями, вам может потребоваться сделать несколько вещей, чтобы вернуться в нужное русло, в зависимости от ситуации.

Если у вас есть класс миграции, который ЧАСТИЧНО работает (собираетсявверх или вниз в версии), но есть ошибки, тогда схема вашей базы данных будет несовместимой между миграцией, и тогда она может не пойти вверх или вниз.Затем в следующий раз, когда вы попытаетесь запустить его, вы получите еще больше ошибок из-за уже внесенных изменений.

Затем вам придется либо применить ТОЛЬКО пропущенные изменения и перезапустить его, пока оно не будет выполнено.Я делаю это, временно комментируя уже отработанные части миграции и исправляя проблемы с теми, которые потерпели неудачу. Это также можно сделать вручную с помощью инструментов управления вашей базой данных, но вы рискуете не совсем точно настроитьтаким же образом.

Иногда также полезно вручную изменить значение, хранящееся в таблицеigration_version (с использованием инструмента базы данных, не относящегося к Doctrine), чтобы заставить Doctrine реализовать его в другой версии.Затем попробуйте мигрировать вниз и снова.

Кроме того, я настоятельно рекомендую всегда тестировать новые классы миграции, применяя их вверх, затем обратно на одну версию и снова вверх.В доктрине есть ошибки: задача generate-migrations-diff, которая особенно при использовании внешних ключей может создать необратимые миграции.Я считаю, что они должны быть отредактированы вручную перед запуском, чтобы быть действительными в обоих направлениях.

...