РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
257 of 258 menu

Метод 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,
    который прерывает выполнение миграции при условии
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить