Базовые сценарии прогона
Обычный цикл
Типичный путь работы с миграциями: сначала инициализируйте проект командой migrate:init, затем накатите все ожидающие миграции через migrate:up. При необходимости откатите изменения командой migrate:down. Обратите внимание: migrate:down без флага --limit откатывает все применённые миграции до полного состояния «до миграций» — чтобы откатить только одну, используйте --limit=1.
/example $ php cli.php migrate:init
[sqlite/db] initialization: setup.sql done
/example $ php cli.php migrate:up
[sqlite/db] up: 202501011024_entity_create.sql done
[sqlite/db] up: 202501021024_account_create.sql done
[sqlite/db] up: 202501021025_account_email.sql done
/example $ php cli.php migrate:down
[sqlite/db] down: 202501021025_account_email.sql done
[sqlite/db] down: 202501021024_account_create.sql done
[sqlite/db] down: 202501011024_entity_create.sql doneАтомарный прогон: --exactly-all
Флаг --exactly-all объединяет все миграции прогона в единую партию. При падении любой миграции вся партия откатывается, и база данных остаётся в исходном состоянии. Применяйте эту опцию там, где важен принцип «всё или ничего» — например, при деплое на продакшен.
/example $ php cli.php migrate:up --exactly-all
[sqlite/db] up: 202501011024_entity_create.sql done
[sqlite/db] up: 202501021024_account_create.sql done
[sqlite/db] up: 202501021025_account_email.sql doneПовторяемые миграции: --with-repeatable
Флаг --with-repeatable указывает применить повторяемые миграции после обычных. Они берутся из каталога <source>-repeatable и прогоняются заново при каждом изменении содержимого файла — удобно для представлений, функций и других идемпотентных объектов схемы. Обратите внимание: --with-repeatable несовместим с --dry-run.
/example $ php cli.php migrate:up --with-repeatable
[sqlite/db] up: 202501011024_entity_create.sql done
[sqlite/db] up: 202501021024_account_create.sql done
[sqlite/db] up: 202501021025_account_email.sql done
[sqlite/db] repeatable: 202501011024_entity_correction.sql done
[sqlite/db] repeatable: 202501011024_entity_correction_2.sql doneФильтр по базе: --db
В одном Migrator может быть зарегистрировано несколько объектов Migration. Флаг --db позволяет выбрать конкретную базу данных для команды. Имя базы формируется как <driver-name>/<source-name> — например, pgsql/main или sqlite/db. Без --db команда применяется ко всем зарегистрированным базам одновременно.
/example $ php cli.php migrate:up --db=pgsql/main
[pgsql/main] up: 202501011024_entity_create.sql doneТестовый прогон: --dry-run
Флаг --dry-run переводит команду в режим тестового прогона: утилита печатает план миграций, но не применяет никаких изменений в базе данных. Это удобно для проверки в CI и для ревью миграций перед реальным применением.
/example $ php cli.php migrate:up --dry-run
[sqlite/db] up: 202501011024_entity_create.sql (dry-run) done