Simple PHP database migrations
To run unit tests type composer run test
.
To implement migrations into existed project add two classes into dependency injection container assuming that db
dependency is a database connection (SimpleDatabase\Client\SqlConnectionInterface
):
use SimpleDatabaseMigrations\Command\MigrationsCommand;
use SimpleDatabaseMigrations\Manager\MigrationsManager;
$container = $this->getContainer();
$container
->setObject('migrationsManager', MigrationsManager::class, ['db'], [
$container->get('baseDir') . '/src/Migration', 'MyProject\\Migration',
])
->setObject('migrationsCommand', MigrationsCommand::class, ['migrationsManager'])
;
Then create bin/migrations
file with the following content:
#!/usr/bin/env php
<?php
use MyProject\Bootstrap;
use SimpleDatabaseMigrations\Command\MigrationsCommand;
$baseDir = realpath(dirname(__FILE__) . '/..');
require_once($baseDir . '/vendor/autoload.php');
$bootstrap = new Bootstrap($baseDir);
/** @var MigrationsCommand $command */
$command = $bootstrap
->getContainer()
->get('migrationsCommand')
;
$command->execute($argv);
All migration commands works on a server on which application runs so on Docker container (access via Docker container's bash) in case of local environment. There is a list of available commands:
bin/migrations status
- returns migrations status; supports the following flags:--full
- returns full information about migrations status,
bin/migrations create
- creates empty migration file to fill with queries,bin/migrations migrate
- implements migrations; supports the following flags:--remove-unknown
- removes unknown migrations (record in database but no corresponding file),
bin/migrations migrate 1234567890
- implements or reverts migration to the given version (e.g.1234567890
),bin/migrations migrate empty
- reverts all migrations.