You are browsing a version that is no longer maintained. |
Migration Classes
Migration classes must extend Doctrine\Migrations\AbstractMigration
and at a minimum they must implement the up
and down
methods. You can easily generate a blank migration to modify with the following command:
$ ./vendor/bin/doctrine-migrations generate
Generated new migration class to "/data/doctrine/migrations-docs-example/lib/MyProject/Migrations/Version20180601193057.php"
To run just this migration for testing purposes, you can use migrations:execute --up 20180601193057
To revert the migration you can use migrations:execute --down 20180601193057
The above command will generate a PHP class with the path to it visible like above. Here is what the blank migration looks like:
<?php
declare(strict_types=1);
namespace MyProject\Migrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20180601193057 extends AbstractMigration
{
public function getDescription() : string
{
return '';
}
public function up(Schema $schema) : void
{
// this up() migration is auto-generated, please modify it to your needs
}
public function down(Schema $schema) : void
{
// this down() migration is auto-generated, please modify it to your needs
}
}
Methods to Implement
The AbstractMigration
class provides a few methods you can override to define additional behavior for the migration.
isTransactional
Override this method if you want to disable transactions in a migration. It defaults to true.
public function isTransactional() : bool
{
return false;
}
Some database platforms like MySQL or Oracle do not support DDL
statements in transactions and may or may not implicitly commit the
transaction opened by this library as soon as they encounter such a
statement, and before running it. Make sure to read the manual of
your database platform to know what is actually happening.
|
getDescription
Override this method if you want to provide a description for your migration. The value returned here
will get outputted when you run the ./vendor/bin/doctrine-migrations status --show-versions
command.
public function getDescription() : string
{
return 'The description of my awesome migration!';
}
preUp
This method gets called before the up()
is called.
public function preUp(Schema $schema) : void
{
}
postUp
This method gets called after the up()
is called.
public function postUp(Schema $schema) : void
{
}
preDown
This method gets called before the down()
is called.
public function preDown(Schema $schema) : void
{
}
postDown
This method gets called after the down()
is called.
public function postDown(Schema $schema) : void
{
}
Methods to Call
The AbstractMigration
class provides a few methods you can call in your migrations to perform various functions.
warnIf
Warn with a message if some condition is met.
public function up(Schema $schema) : void
{
$this->warnIf(true, 'Something might be going wrong');
// ...
}
abortIf
Abort the migration if some condition is met:
public function up(Schema $schema) : void
{
$this->abortIf(true, 'Something went wrong. Aborting.');
// ...
}
skipIf
Skip the migration if some condition is met.
public function up(Schema $schema) : void
{
$this->skipIf(true, 'Skipping this migration.');
// ...
}
addSql
You can use the addSql
method within the up
and down
methods. Internally the addSql
calls are passed
to the executeQuery method in the DBAL. This means that you can use the power of prepared statements easily and that
you don't need to copy paste the same query with different parameters. You can just pass those differents parameters
to the addSql method as parameters.
public function up(Schema $schema) : void
{
$users = [
['name' => 'mike', 'id' => 1],
['name' => 'jwage', 'id' => 2],
['name' => 'ocramius', 'id' => 3],
];
foreach ($users as $user) {
$this->addSql('UPDATE user SET happy = true WHERE name = :name AND id = :id', $user);
}
}
write
Write some debug information to the console.
public function up(Schema $schema) : void
{
$this->write('Doing some cool migration!');
// ...
}
throwIrreversibleMigrationException
If a migration cannot be reversed, you can use this exception in the down
method to indicate such.
The throwIrreversibleMigrationException
method accepts an optional message to output.
public function down(Schema $schema) : void
{
$this->throwIrreversibleMigrationException();
// ...
}