В современных PHP-фреймворках, таких как Symfony и Laravel, миграция обычно имеет методы up
и down
. В методе определения миграции up
вам пришлось написать код, который вызывается только при запуске миграции вперед, а в методе down
— код, который вызывается только при откате миграции назад. Стандартной практикой является сделать миграцию базы данных необратимой. Миграции должны быть обратно совместимыми и осуществляться только вперед.
В Laravel отсутствующий или down
метод не предотвращает откатную миграцию при выполнении команды CLI php artisan migrate:rollback
. Состояние базы данных не изменится, но миграция будет удалена из реестра примененных миграций, и следующее выполнение php artisan migrate
снова вызовет метод up
. Чтобы предотвратить такое поведение, все миграции должны иметь метод down
, который будет вызывать исключение, и не более того.
php db migration validator проверяет, все ли файлы миграции соответствуют этому требованию. Вы можете добавить его в git-хуки сервера, чтобы предотвратить откат миграции, или добавить этап проверки в CI.
Загрузите пакет через Composer.
php composer require antonkomarev/php-db-migration-validator
Подтвердить файл
php vendor/bin/php-db-migration-validator --rule=irreversible migrations/file.php
Проверка большого количества файлов
php vendor/bin/php-db-migration-validator --rule=irreversible migrations/file.php migrations/file2.php
Проверка многих файлов по подстановочному знаку
php vendor/bin/php-db-migration-validator --rule=irreversible migrations/2022_ *
Проверить файлы в каталоге
php vendor/bin/php-db-migration-validator --rule=irreversible migrations/
Проверка файлов во многих каталогах
php vendor/bin/php-db-migration-validator --rule=irreversible app/migrations/ vendor/migrations/
Автоматизация проверки всех вкладов в репозиторий в рамках непрерывной интеграции — один из возможных способов использования этого инструмента.
Создайте файл .github/workflows/db-migration-validation.yaml
в репозитории приложения.
name : DB Migration Validation
on :
push :
jobs :
db-migration-validation :
runs-on : ubuntu-latest
steps :
- uses : actions/checkout@v2
- uses : shivammathur/setup-php@v2
with :
php-version : 8.1
extensions : tokenizer
coverage : none
- name : Install php db migration validator dependency
run : composer global require antonkomarev/php-db-migration-validator --no-interaction
- name : Ensure all database migrations are irreversible
run : php-db-migration-validator --rule=irreversible ./database/migrations
$ php vendor/bin/php-db-migration-validator --help
php db migration validator
--------------------------
by Anton Komarev <[email protected]>
Usage: php-db-migration-validator --rule=<rule> <path>
The following commands are available:
help Shows this usage instructions.
Options:
--rules=<rule> Validates the database migration(s) in the specified <path>.
Exits with code 1 on validation errors, 2 on other errors and 0 on success.
Available rules (at least one should be specified):
- irreversible — ensure if migration file has `down` method and this method throws an Exception.
php db migration validator
— это программное обеспечение с открытым исходным кодом, лицензированное Антоном Комаревым по лицензии MIT. Если вы хотите поддержать разработку php db migration validator , рассмотрите возможность спонсировать меня. Спасибо!
CyberCog — это Социальное Объединение энтузиастов. Находить лучшие решения в области разработки продуктов и программного обеспечения — наша страсть.