In modernen PHP-Frameworks wie Symfony und Laravel verfügen Migrationen normalerweise über up
und down
-Methoden. In der up
Methode der Migrationsdefinition mussten Sie Code schreiben, der nur aufgerufen wird, wenn die Migration vorwärts ausgeführt wird, und in down
-Methode – den Code, der nur aufgerufen wird, wenn die Migration rückwärts ausgeführt wird. Es ist gängige Praxis, Datenbankmigrationen unumkehrbar zu machen. Migrationen sollten abwärtskompatibel sein und nur vorwärts erfolgen.
In Laravel verhindert eine fehlende oder leere down
-Methode nicht die Rollback-Migration bei der Ausführung des CLI-Befehls php artisan migrate:rollback
. Der Status der Datenbank ändert sich nicht, aber die Migration wird aus der Registrierung der angewendeten Migrationen entfernt und die nächste Ausführung von php artisan migrate
ruft die up
-Methode erneut auf. Um dieses Verhalten zu verhindern, sollten alle Migrationen über eine down
-Methode verfügen, die eine Ausnahme auslöst, nichts weiter.
php db migration validator prüft, ob alle Migrationsdateien diese Anforderung erfüllen. Sie können es zu den Git-Hooks des Servers hinzufügen, um ein Rollback der Migration zu verhindern, oder einen Validierungsschritt zu CI hinzufügen.
Ziehen Sie das Paket über Composer ein.
php composer require antonkomarev/php-db-migration-validator
Datei validieren
php vendor/bin/php-db-migration-validator --rule=irreversible migrations/file.php
Viele Dateien validieren
php vendor/bin/php-db-migration-validator --rule=irreversible migrations/file.php migrations/file2.php
Validieren Sie viele Dateien per Platzhalter
php vendor/bin/php-db-migration-validator --rule=irreversible migrations/2022_ *
Dateien im Verzeichnis validieren
php vendor/bin/php-db-migration-validator --rule=irreversible migrations/
Validieren Sie Dateien in vielen Verzeichnissen
php vendor/bin/php-db-migration-validator --rule=irreversible app/migrations/ vendor/migrations/
Die Automatisierung der Validierung aller Beiträge zum Repository im Rahmen der Continuous Integration ist eine der möglichen Einsatzmöglichkeiten dieses Tools.
Erstellen Sie die Datei .github/workflows/db-migration-validation.yaml
im Anwendungs-Repository.
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
-Paket ist eine Open-Source-Software, die unter der MIT-Lizenz von Anton Komarev lizenziert ist. Wenn Sie die Entwicklung von php db migration validator unterstützen möchten, denken Sie bitte darüber nach, mich zu sponsern. Vielen Dank!
CyberCog ist eine soziale Einheit von Enthusiasten. Die Erforschung der besten Lösungen in der Produkt- und Softwareentwicklung ist unsere Leidenschaft.