drago-ex / migration
A simple CLI tool for running SQL migrations.
Installs: 10
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/drago-ex/migration
Requires
- php: >=8.3 <9
- contributte/console: ^0.10
- dibi/dibi: ^5.0
Requires (Dev)
- nette/bootstrap: ^3.2
- nette/tester: ^2.5
- phpstan/phpstan-nette: ^1.2.9
- tracy/tracy: ^2.10
README
A simple CLI tool for running SQL migrations.
Drago Migration is a lightweight CLI tool built on Nette, Dibi and Symfony Console. It allows you to run SQL migrations from files or directories with checksum validation, transactional execution and database-level locking.
Requirements
- PHP >= 8.3
- Nette Framework
- Symfony Console
- dibi
- Composer
Install
composer require drago/migration
Register Migration Extension in Nette
extensions: migration: Drago\Migration\DI\MigrationExtension(%consoleMode%) console: Contributte\Console\DI\ConsoleExtension(%consoleMode%) # symfony console console: name: Symfony Console version: '1.0'
Make sure the %consoleMode% parameter is available (usually already present in Nette CLI setups).
Database Setup
Create the migrations table in your database:
CREATE TABLE IF NOT EXISTS migrations ( id INT AUTO_INCREMENT PRIMARY KEY, package VARCHAR(255) NOT NULL, migration_file VARCHAR(255) NOT NULL, checksum CHAR(40) NOT NULL, executed_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT uq_migrations_package_file UNIQUE (package, migration_file) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
Usage
Run migrations using the Composer-installed binary:
php vendor/bin/migration db:migrate <path>
Path to a single SQL file or a directory containing multiple .sql files.
Examples
# Run all migrations in a folder php vendor/bin/migration db:migrate migrations/ # Run a single migration file php vendor/bin/migration db:migrate migrations/001_example.sql
Features
- Checksum validation – detects modified migrations
- Transactional execution – safe rollback on failure
- Database locking – prevents concurrent runs
- Package-aware migrations – supports vendor-based migrations
- Symfony Console integration – clean CLI output
Notes
- This package is designed for Nette Framework projects.
- The provided CLI binary expects a Nette project structure with app/Bootstrap.php.
- For non-Nette projects, a custom bootstrap script is required.