Метод warnIf
Метод warnIf класса AbstractMigration
выводит предупреждающее сообщение во время
выполнения миграции. Первым параметром
передаётся условие, при котором нужно показать
предупреждение, вторым - текст сообщения.
Метод удобен для информирования разработчика
о потенциально опасных изменениях схемы базы
данных.
Синтаксис
warnIf(bool $condition, string $message): void
Пример
Давайте создадим миграцию и выведем предупреждение, если в таблице уже есть записи:
<?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
{
$count = $this->connection
->fetchOne('SELECT COUNT(*) FROM article');
$this->warnIf(
$count > 0,
'В таблице article уже есть записи'
);
$this->addSql('ALTER TABLE article ADD user_id INT');
}
public function down(Schema $schema): void
{
$this->addSql('ALTER TABLE article DROP user_id');
}
}
?>
Если в таблице article есть хотя бы одна
запись, при выполнении миграции будет выведено
предупреждение:
[WARNING] В таблице article уже есть записи
Пример
Давайте проверим наличие колонки перед её удалением и предупредим, если она содержит данные:
<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
final class Version20240102000000 extends AbstractMigration
{
public function up(Schema $schema): void
{
$schemaManager = $this->connection->createSchemaManager();
if ($schemaManager->tablesExist(['user'])) {
$count = $this->connection
->fetchOne('SELECT COUNT(*) FROM user');
$this->warnIf(
$count > 0,
'Удаление таблицы user приведёт к потере данных'
);
$this->addSql('DROP TABLE user');
}
}
public function down(Schema $schema): void
{
$this->addSql('CREATE TABLE user (id INT NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id))');
}
}
?>
Результат выполнения кода при наличии данных:
[WARNING] Удаление таблицы user приведёт к потере данных
Смотрите также
-
класс
AbstractMigration,
который является базовым классом для миграций -
метод
abortIf,
который прерывает выполнение миграции -
метод
skipIf,
который пропускает выполнение миграции -
метод
addSql,
который добавляет SQL-запрос в миграцию