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