Класс AbstractMigration
Класс AbstractMigration наследуется
всеми классами миграций Doctrine в Symfony.
Он реализует интерфейс MigrationInterface
и предоставляет методы up и down,
которые описывают изменения схемы базы данных
при применении и откате миграции. Внутри этих
методов используется объект $this->connection
для выполнения SQL-запросов и $this->addSql
для добавления запросов в очередь выполнения.
Также доступны методы preUp, postUp,
abortIf, skipIf и warnIf
для управления ходом выполнения миграции.
Синтаксис
<?php
abstract class AbstractMigration implements MigrationInterface
{
public function up(Schema $schema): void
{
// ...
}
public function down(Schema $schema): void
{
// ...
}
}
?>
Пример
Давайте создадим миграцию, которая добавляет
таблицу article с полями id,
title и content:
<?php
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
final class Version20240101000000 extends AbstractMigration
{
public function up(Schema $schema): void
{
$this->addSql('CREATE TABLE article (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL
)');
}
public function down(Schema $schema): void
{
$this->addSql('DROP TABLE article');
}
}
?>
Результат выполнения команды миграции:
php bin/console doctrine:migrations:migrate
"Migrating up to 20240101000000"
"Table article created successfully"
Пример
Давайте добавим новое поле created_at
в таблицу article:
<?php
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
final class Version20240102000000 extends AbstractMigration
{
public function up(Schema $schema): void
{
$this->addSql('ALTER TABLE article ADD COLUMN created_at DATETIME DEFAULT NULL');
}
public function down(Schema $schema): void
{
$this->addSql('ALTER TABLE article DROP COLUMN created_at');
}
}
?>
Результат выполнения команды миграции:
php bin/console doctrine:migrations:migrate
"Migrating up to 20240102000000"
"Column created_at added successfully"
Пример
Давайте используем метод abortIf
для проверки условия перед выполнением миграции:
<?php
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
final class Version20240103000000 extends AbstractMigration
{
public function up(Schema $schema): void
{
$this->abortIf(
!$schema->hasTable('article'),
'Table article does not exist'
);
$this->addSql('ALTER TABLE article ADD COLUMN status VARCHAR(50) DEFAULT NULL');
}
public function down(Schema $schema): void
{
$this->addSql('ALTER TABLE article DROP COLUMN status');
}
}
?>
Результат выполнения команды миграции:
php bin/console doctrine:migrations:migrate
"Migrating up to 20240103000000"
"Column status added successfully"