veejay / migration
Abstract migration engine for any database
0.1.0
2026-05-30 22:54 UTC
Requires
- php: ^8.0
- ext-pdo: *
- symfony/console: ^6.0
- veejay/container: ^1.0
- veejay/sql: ^1.0
- veejay/template: ^1.1
Requires (Dev)
- nyholm/nsa: ^1.4
- phpunit/phpunit: ^9.6
This package is auto-updated.
Last update: 2026-05-30 22:57:44 UTC
README
Abstract migration engine for any database.
Initialize
At first, you should create config file with command:
vendor/bin/migration init
Or you can create and edit migration.php file manually. Example config:
<?php use Veejay\Migration\Repository\SqlRepository; return [ 'path' => __DIR__ . '/migration', 'repository' => new SqlRepository( 'mysql:host=localhost;dbname=database', 'root', 'password', null, SqlRepository::MIGRATION_TABLE, ), ];
Create
Next command will create new migration file with name like m_000000_000000_my_1st_migration.
vendor/bin/migration create my_1st_migration
Then you should edit up() and down() methods according to your purposes.
<?php declare(strict_types=1); use Veejay\Migration\Unit\Migration; final class m_000000_000000_my_1st_migration extends Migration { public function up(): bool { $repository = $this->getRepository(); /* @var SqlRepository $repository */ $sql = 'CREATE TABLE `test` (`id` INT AUTO_INCREMENT, `name` TEXT, PRIMARY KEY (`id`) USING BTREE)'; return $repository->getDb()->execute($sql); } public function down(): bool { $repository = $this->getRepository(); /* @var SqlRepository $repository */ $sql = 'DROP TABLE `test`'; return $repository->getDb()->execute($sql); } }
Run
Apply all migrations.
vendor/bin/migration migrate
Apply/revert to specific migration.
vendor/bin/migration migrate name_part
Print migration history.
vendor/bin/migration history
Custom database
You can write your own wrapper for any DB. Just implement Veejay\Migration\Repository\RepositoryInterface and use any storage you want.
Requirements
- PHP 8.0+
Installation
composer require "veejay/migration"