Удаление лишних миграций в Symfony

Удаление лишних миграций в Symfony

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

Важно понимать, что этот способ работает, если Вы создавали миграции через make:migration, т.е. состояния таблиц сущностей в БД должны соответствовать самим сущностям в проекте.

Перед выполнением указанных манипуляций создайте резервную копию миграций и БД, в случае неудачи можно будет откатиться обратно.

Итак, поехали:

  1. Удалите все миграции. Из БД удалите таблицу doctrine_migration_versions.
  2. Этот пункт нужно выполнить, если Вам важно содержимое таблиц БД. Cделайте дамп Вашей базы данных без структуры таблиц
    $ mysqldump -u [user] -p[password] --no-create-info YourDb > /path/to/backupDb.sql
  3. Удалите из БД все таблицы сущностей.
  4. Сгенерируйте миграции заново командой
    $ php bin/console make:migration
    Теперь у Вас появилась одна миграция, аккумулирующая в стебе все предыдущие.
  5. При необходимости скорректируйте эту миграцию (не забудьте об индексах, которые вы могли создавать, например, для полнотекстового поиска и т.п.)
  6. Выполните миграцию командой
    $ php bin/console doctrine:migrations:migrate
  7. Если Вы использовали п.2, восстановите данные из бекапа
    $ mysql -u [user] -p[password] YourDb < /path/to/backupDb.sql

Готово. Теперь состояние Ваших сущностей соответствует таблицам в БД, а все миграции поместились в одну, накопительную.