Метод postUp
Метод postUp принадлежит классу AbstractMigration
и вызывается автоматически после успешного выполнения
метода up. Он не принимает параметров и не
возвращает значения. Метод используется для выполнения
дополнительных действий: заполнение справочных данных,
обновление кэша, запись в лог, отправка уведомлений
и любые другие операции, которые должны произойти
строго после изменения структуры базы данных.
Важно понимать порядок вызовов: сначала выполняется
preUp, затем up и только потом
postUp. Если метод up завершится
ошибкой, то postUp вызван не будет.
Синтаксис
public function postUp(Schema $schema): void
Пример
Давайте создадим миграцию, которая после создания таблицы заполнит её начальными данными:
<?php
namespace DoctrineMigrations;
use DoctrineDBALSchemaSchema;
use DoctrineMigrationsAbstractMigration;
class Version20240101000000 extends AbstractMigration
{
public function up(Schema $schema): void
{
$this->addSql('CREATE TABLE article (id INT AUTO_INCREMENT NOT NULL, title VARCHAR(255) NOT NULL, PRIMARY KEY(id))');
}
public function postUp(Schema $schema): void
{
$this->addSql("INSERT INTO article (title) VALUES ('article 1')");
$this->addSql("INSERT INTO article (title) VALUES ('article 2')");
}
public function down(Schema $schema): void
{
$this->addSql('DROP TABLE article');
}
}
?>
После применения миграции таблица article будет
содержать две записи.
Пример
Давайте выведем сообщение после выполнения миграции:
<?php
namespace DoctrineMigrations;
use DoctrineDBALSchemaSchema;
use DoctrineMigrationsAbstractMigration;
class Version20240101000001 extends AbstractMigration
{
public function up(Schema $schema): void
{
$this->addSql('CREATE TABLE user (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id))');
}
public function postUp(Schema $schema): void
{
$this->write('Migration completed successfully');
}
public function down(Schema $schema): void
{
$this->addSql('DROP TABLE user');
}
}
?>
Результат выполнения кода:
"Migration completed successfully"
Метод write выводит сообщение в консоль при
выполнении команды doctrine:migrations:migrate.
Пример
Давайте проверим, что таблица существует, и только тогда выполним дополнительные действия:
<?php
namespace DoctrineMigrations;
use DoctrineDBALSchemaSchema;
use DoctrineMigrationsAbstractMigration;
class Version20240101000002 extends AbstractMigration
{
public function up(Schema $schema): void
{
$this->addSql('CREATE TABLE article (id INT AUTO_INCREMENT NOT NULL, title VARCHAR(255) NOT NULL, PRIMARY KEY(id))');
}
public function postUp(Schema $schema): void
{
if ($schema->hasTable('article')) {
$this->addSql("INSERT INTO article (title) VALUES ('hello')");
}
}
public function down(Schema $schema): void
{
$this->addSql('DROP TABLE article');
}
}
?>
Результат выполнения кода:
[1, 2, 3]
В результате в таблицу article будет добавлена
одна запись со значением 'hello'.
Смотрите также
-
класс
AbstractMigration,
который является базовым классом для миграций -
метод
up,
который применяет изменения схемы базы данных -
метод
preUp,
который выполняется перед методом up -
метод
addSql,
который добавляет SQL-запрос в очередь миграции