<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* 会員登録URLのリダイレクト機能のためのマイグレーション
* dtb_schoolテーブルにredirect_flgとredirect_urlフィールドを追加
*/
final class Version20250917120000 extends AbstractMigration
{
public function getDescription(): string
{
return 'dtb_schoolテーブルにredirect_flg(smallint)とredirect_url(longtext)を追加';
}
public function up(Schema $schema): void
{
// redirect_flgカラムが存在するかチェック
$schemaManager = $this->connection->createSchemaManager();
$columns = $schemaManager->listTableColumns('dtb_school');
$hasRedirectFlg = false;
$hasRedirectUrl = false;
foreach ($columns as $column) {
if ($column->getName() === 'redirect_flg') {
$hasRedirectFlg = true;
}
if ($column->getName() === 'redirect_url') {
$hasRedirectUrl = true;
}
}
// redirect_flgカラムが存在しない場合のみ追加
if (!$hasRedirectFlg) {
$this->addSql('ALTER TABLE dtb_school ADD redirect_flg SMALLINT DEFAULT 0 NOT NULL');
}
// redirect_urlカラムが存在しない場合のみ追加
if (!$hasRedirectUrl) {
$this->addSql('ALTER TABLE dtb_school ADD redirect_url LONGTEXT DEFAULT NULL');
}
}
public function down(Schema $schema): void
{
// rollback処理 - カラムが存在する場合のみ削除
$schemaManager = $this->connection->createSchemaManager();
$columns = $schemaManager->listTableColumns('dtb_school');
$hasRedirectFlg = false;
$hasRedirectUrl = false;
foreach ($columns as $column) {
if ($column->getName() === 'redirect_flg') {
$hasRedirectFlg = true;
}
if ($column->getName() === 'redirect_url') {
$hasRedirectUrl = true;
}
}
if ($hasRedirectUrl) {
$this->addSql('ALTER TABLE dtb_school DROP redirect_url');
}
if ($hasRedirectFlg) {
$this->addSql('ALTER TABLE dtb_school DROP redirect_flg');
}
}
}