Migrations come with predefined Symfony Console Commands. For integration to
Nette DI use Kdyby/Console. Just register and
configure MigrationsExtension
in your config.neon
:
extensions:
migrations: Nextras\Migrations\Bridges\NetteDI\MigrationsExtension
migrations:
dir: %appDir%/../migrations # migrations base directory
driver: pgsql # pgsql or mysql
dbal: nextras # nextras, nette, doctrine or dibi
Three basic commands are available:
migrations:create
command.migrations:continue
command.migrations:reset
command.Create new PHP file (e.g. ./migrations/run.php
) with the
following content:
use Nextras\Migrations\Bridges;
use Nextras\Migrations\Controllers;
use Nextras\Migrations\Drivers;
use Nextras\Migrations\Extensions;
require __DIR__ . '/../vendor/autoload.php';
$conn = new Nextras\Dbal\Connection(...);
// or new Nette\Database\Connection(...);
// or new Doctrine\Dbal\Connection(...);
// or new DibiConnection(...);
$dbal = new Bridges\NextrasDbal\NextrasAdapter($conn);
// or new Bridges\NetteDatabase\NetteAdapter($conn);
// or new Bridges\DoctrineDbal\DoctrineAdapter($conn);
// or new Bridges\Dibi\DibiAdapter($conn);
$driver = new Drivers\PgSqlDriver($dbal);
// or new Drivers\MySqlDriver($dbal);
$controller = new Controllers\HttpController($driver);
// or new Controllers\ConsoleController($driver);
$baseDir = __DIR__;
$controller->addGroup('structures', "$baseDir/structures");
$controller->addGroup('basic-data', "$baseDir/basic-data", ['structures']);
$controller->addGroup('dummy-data', "$baseDir/dummy-data", ['basic-data']);
$controller->addExtension('sql', new Extensions\SqlHandler($driver));
$controller->run();
Open the script in your browser (HttpController
) or in a
terminal (ConsoleController
).
The following structure is recommended and used by Symfony Console Commands by default:
migrations
├── basic-data # for both development and production
│ ├── 2015-03-16-170342-languages.sql # YYYY-MM-DD-HHMMSS-label.extension
│ └── ...
├── dummy-data # for development on localhost
│ ├── 2015-03-17-104235-users.sql
│ └── ...
├── structures # create, alter tables...
│ ├── 2015-03-17-155419-users.sql
│ └── ...
└── run.php # start script if you don't
# use Symfony Console Commands
Optionally you can use deep directory structure which is suitable if you have a lot of migrations:
migrations/
├── basic-data/
│ └── 2015/
│ ├── 03/
│ │ ├── 2015-03-16-170342-languages.sql
│ │ └── ...
│ └── 04/
│ └── ...
└── ...
Most commonly used handler. Executes all SQL queries contained in a file.
// installation in migrations/run.php
$controller->addExtension('sql', new Extensions\SqlHandler($driver));
Used for complex migrations which can not be written in SQL.
// installation in migrations/run.php
$controller->addExtension('php', new Extensions\PhpHandler([
// list of parameters passed to PHP script, e.g.
'dibi' => $conn,
]));