Метод skipIf класса AbstractMigration
Метод skipIf класса AbstractMigration позволяет пропустить выполнение миграции, если заданное условие истинно. Метод принимает один параметр $condition типа bool - если он равен true, миграция не будет выполнена, а в выводе команды появится сообщение о пропуске. Метод удобно вызывать в методе up для проверки наличия таблицы, колонки или других условий перед выполнением изменений схемы.
Синтаксис
public function skipIf(bool $condition): void
Пример
Давайте создадим миграцию, которая пропускает выполнение, если таблица article уже существует:
<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
final class Version20240101000000 extends AbstractMigration
{
public function up(Schema $schema): void
{
$this->skipIf($schema->hasTable('article'), 'Table article already exists');
$this->addSql('CREATE TABLE article (id INT AUTO_INCREMENT NOT NULL, title VARCHAR(255) NOT NULL, PRIMARY KEY(id))');
}
public function down(Schema $schema): void
{
$this->addSql('DROP TABLE article');
}
}
?>
Результат выполнения команды php bin/console doctrine:migrations:migrate, если таблица уже есть:
[WARNING] Migration Version20240101000000 was skipped: Table article already exists
Пример
Давайте пропустим миграцию, если в таблице article уже есть колонка created_at:
<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
final class Version20240101000001 extends AbstractMigration
{
public function up(Schema $schema): void
{
$table = $schema->getTable('article');
$this->skipIf($table->hasColumn('created_at'), 'Column created_at already exists');
$this->addSql('ALTER TABLE article ADD created_at DATETIME NOT NULL');
}
public function down(Schema $schema): void
{
$this->addSql('ALTER TABLE article DROP created_at');
}
}
?>
Результат выполнения команды php bin/console doctrine:migrations:migrate, если колонка уже есть:
[WARNING] Migration Version20240101000001 was skipped: Column created_at already exists
Смотрите также
-
класс
AbstractMigration,
который является базовым классом для всех миграций -
метод
up,
который выполняет изменения схемы при миграции -
метод
addSql,
который добавляет SQL-запрос в очередь выполнения -
метод
abortIf,
который прерывает выполнение миграции при условии