Schema-first database migrations for PHP.
Schemage lets you describe the desired database structure with a clean PHP DSL, compare it with the current database, review a migration plan, generate SQL, and apply the required changes through a lightweight CLI.
- Schema-first PHP DSL
- MySQL, MariaDB, and SQLite support
- Database introspection and schema diffing
- Table, column, index, and foreign-key operations
- Explicit table and column renames
- Driver-specific operation planning
- Interactive migration plans
- Dry-run and SQL export modes
- Migration history and rollback support
- Destructive-operation protection
- Optional model generation
composer require eril/schemage<?php
use Schemage\DSL\Schema;
use Schemage\DSL\Table;
return function (Schema $schema): void {
$schema->table('users', function (Table $t): void {
$t->id();
$t->string('name');
$t->string('email')->unique('users_email_unique');
$t->timestamps();
});
};Preview pending changes:
vendor/bin/schemage --dry-runApply interactively:
vendor/bin/schemageApply without confirmation:
vendor/bin/schemage --yesFor non-interactive destructive migrations:
vendor/bin/schemage --yes --forceTables may declare default rows using seed():
$schema->table('roles', function (Table $t) {
...
})->seed([
['id' => 1, 'code' => 'admin'],
['id' => 2, 'code' => 'user'],
]);Declared rows are inserted automatically after migrations and ignored if they already exist.
Full documentation is available online:
https://erilshackle.github.io/php-schemage/
Documentation includes:
Start with:
docs/getting-started.mddocs/schema.mddocs/columns.mddocs/indexes.mddocs/foreign-keys.mddocs/cli.md
MIT