app/DoctrineMigrations/Version20251114100000.php line 1

Open in your IDE?
  1. <?php
    
    declare(strict_types=1);
    
    namespace DoctrineMigrations;
    
    use Doctrine\DBAL\Schema\Schema;
    use Doctrine\Migrations\AbstractMigration;
    
    /**
     * ユーザー画面のメニュー・バナー表示制御フラグの追加
     * dtb_schoolテーブルに以下のカラムを追加:
     * - shopping_guide_menu_flag (お買い物ガイドメニュー)
     * - shopping_guide_banner_flag (お買い物ガイドバナー)
     * - correct_size_menu_flag (サイズの選び方メニュー)
     * - correct_size_banner_flag (サイズの選び方バナー)
     * - commitment_uniform_menu_flag (制服へのこだわりメニュー)
     * - commitment_uniform_banner_flag (制服へのこだわりバナー)
     * - measurement_procedure_banner_flag (採寸の手順バナー)
     * - return_exchange_banner_flag (返品交換についてバナー)
     */
    final class Version20251114100000 extends AbstractMigration
    {
        public function getDescription(): string
        {
            return 'dtb_schoolテーブルにメニュー・バナー表示制御フラグを追加';
        }
    
        public function up(Schema $schema): void
        {
            // MySQLの場合のみ実行
            if ($this->connection->getDatabasePlatform()->getName() !== 'mysql') {
                return;
            }
    
            // カラムの存在確認
            $sql = "SELECT COLUMN_NAME FROM information_schema.COLUMNS 
                    WHERE TABLE_SCHEMA = DATABASE() 
                    AND TABLE_NAME = 'dtb_school' 
                    AND COLUMN_NAME IN (
                        'shopping_guide_menu_flag',
                        'shopping_guide_banner_flag',
                        'correct_size_menu_flag',
                        'correct_size_banner_flag',
                        'commitment_uniform_menu_flag',
                        'commitment_uniform_banner_flag',
                        'measurement_procedure_banner_flag',
                        'return_exchange_banner_flag'
                    )";
            
            $existingColumns = array_column($this->connection->fetchAllAssociative($sql), 'COLUMN_NAME');
    
            // 各フラグカラムを追加
            if (!in_array('shopping_guide_menu_flag', $existingColumns)) {
                $this->addSql('ALTER TABLE dtb_school ADD shopping_guide_menu_flag SMALLINT UNSIGNED DEFAULT 1 COMMENT \'お買い物ガイドメニュー表示フラグ\'');
            } else {
                // 既存カラムのデフォルト値を変更
                $this->addSql('ALTER TABLE dtb_school MODIFY shopping_guide_menu_flag SMALLINT UNSIGNED DEFAULT 1 COMMENT \'お買い物ガイドメニュー表示フラグ\'');
            }
    
            if (!in_array('shopping_guide_banner_flag', $existingColumns)) {
                $this->addSql('ALTER TABLE dtb_school ADD shopping_guide_banner_flag SMALLINT UNSIGNED DEFAULT 1 COMMENT \'お買い物ガイドバナー表示フラグ\'');
            } else {
                $this->addSql('ALTER TABLE dtb_school MODIFY shopping_guide_banner_flag SMALLINT UNSIGNED DEFAULT 1 COMMENT \'お買い物ガイドバナー表示フラグ\'');
            }
    
            if (!in_array('correct_size_menu_flag', $existingColumns)) {
                $this->addSql('ALTER TABLE dtb_school ADD correct_size_menu_flag SMALLINT UNSIGNED DEFAULT 1 COMMENT \'サイズの選び方メニュー表示フラグ\'');
            } else {
                $this->addSql('ALTER TABLE dtb_school MODIFY correct_size_menu_flag SMALLINT UNSIGNED DEFAULT 1 COMMENT \'サイズの選び方メニュー表示フラグ\'');
            }
    
            if (!in_array('correct_size_banner_flag', $existingColumns)) {
                $this->addSql('ALTER TABLE dtb_school ADD correct_size_banner_flag SMALLINT UNSIGNED DEFAULT 1 COMMENT \'サイズの選び方バナー表示フラグ\'');
            } else {
                $this->addSql('ALTER TABLE dtb_school MODIFY correct_size_banner_flag SMALLINT UNSIGNED DEFAULT 1 COMMENT \'サイズの選び方バナー表示フラグ\'');
            }
    
            if (!in_array('commitment_uniform_menu_flag', $existingColumns)) {
                $this->addSql('ALTER TABLE dtb_school ADD commitment_uniform_menu_flag SMALLINT UNSIGNED DEFAULT 1 COMMENT \'制服へのこだわりメニュー表示フラグ\'');
            } else {
                $this->addSql('ALTER TABLE dtb_school MODIFY commitment_uniform_menu_flag SMALLINT UNSIGNED DEFAULT 1 COMMENT \'制服へのこだわりメニュー表示フラグ\'');
            }
    
            if (!in_array('commitment_uniform_banner_flag', $existingColumns)) {
                $this->addSql('ALTER TABLE dtb_school ADD commitment_uniform_banner_flag SMALLINT UNSIGNED DEFAULT 1 COMMENT \'制服へのこだわりバナー表示フラグ\'');
            } else {
                $this->addSql('ALTER TABLE dtb_school MODIFY commitment_uniform_banner_flag SMALLINT UNSIGNED DEFAULT 1 COMMENT \'制服へのこだわりバナー表示フラグ\'');
            }
    
            if (!in_array('measurement_procedure_banner_flag', $existingColumns)) {
                $this->addSql('ALTER TABLE dtb_school ADD measurement_procedure_banner_flag SMALLINT UNSIGNED DEFAULT 0 COMMENT \'採寸の手順バナー表示フラグ\'');
            } else {
                $this->addSql('ALTER TABLE dtb_school MODIFY measurement_procedure_banner_flag SMALLINT UNSIGNED DEFAULT 0 COMMENT \'採寸の手順バナー表示フラグ\'');
            }
    
            if (!in_array('return_exchange_banner_flag', $existingColumns)) {
                $this->addSql('ALTER TABLE dtb_school ADD return_exchange_banner_flag SMALLINT UNSIGNED DEFAULT 0 COMMENT \'返品交換についてバナー表示フラグ\'');
            } else {
                $this->addSql('ALTER TABLE dtb_school MODIFY return_exchange_banner_flag SMALLINT UNSIGNED DEFAULT 0 COMMENT \'返品交換についてバナー表示フラグ\'');
            }
    
            // 既存データのデフォルト値を更新(NULL値のみ)
            $this->addSql('UPDATE dtb_school SET shopping_guide_menu_flag = 1 WHERE shopping_guide_menu_flag IS NULL');
            $this->addSql('UPDATE dtb_school SET shopping_guide_banner_flag = 1 WHERE shopping_guide_banner_flag IS NULL');
            $this->addSql('UPDATE dtb_school SET correct_size_menu_flag = 1 WHERE correct_size_menu_flag IS NULL');
            $this->addSql('UPDATE dtb_school SET correct_size_banner_flag = 1 WHERE correct_size_banner_flag IS NULL');
            $this->addSql('UPDATE dtb_school SET commitment_uniform_menu_flag = 1 WHERE commitment_uniform_menu_flag IS NULL');
            $this->addSql('UPDATE dtb_school SET commitment_uniform_banner_flag = 1 WHERE commitment_uniform_banner_flag IS NULL');
            $this->addSql('UPDATE dtb_school SET measurement_procedure_banner_flag = 0 WHERE measurement_procedure_banner_flag IS NULL');
            $this->addSql('UPDATE dtb_school SET return_exchange_banner_flag = 0 WHERE return_exchange_banner_flag IS NULL');
        }
    
        public function down(Schema $schema): void
        {
            // MySQLの場合のみ実行
            if ($this->connection->getDatabasePlatform()->getName() !== 'mysql') {
                return;
            }
    
            // カラムの存在確認
            $sql = "SELECT COLUMN_NAME FROM information_schema.COLUMNS 
                    WHERE TABLE_SCHEMA = DATABASE() 
                    AND TABLE_NAME = 'dtb_school' 
                    AND COLUMN_NAME IN (
                        'shopping_guide_menu_flag',
                        'shopping_guide_banner_flag',
                        'correct_size_menu_flag',
                        'correct_size_banner_flag',
                        'commitment_uniform_menu_flag',
                        'commitment_uniform_banner_flag',
                        'measurement_procedure_banner_flag',
                        'return_exchange_banner_flag'
                    )";
            
            $existingColumns = array_column($this->connection->fetchAllAssociative($sql), 'COLUMN_NAME');
    
            // 各フラグカラムを削除
            if (in_array('shopping_guide_menu_flag', $existingColumns)) {
                $this->addSql('ALTER TABLE dtb_school DROP COLUMN shopping_guide_menu_flag');
            }
    
            if (in_array('shopping_guide_banner_flag', $existingColumns)) {
                $this->addSql('ALTER TABLE dtb_school DROP COLUMN shopping_guide_banner_flag');
            }
    
            if (in_array('correct_size_menu_flag', $existingColumns)) {
                $this->addSql('ALTER TABLE dtb_school DROP COLUMN correct_size_menu_flag');
            }
    
            if (in_array('correct_size_banner_flag', $existingColumns)) {
                $this->addSql('ALTER TABLE dtb_school DROP COLUMN correct_size_banner_flag');
            }
    
            if (in_array('commitment_uniform_menu_flag', $existingColumns)) {
                $this->addSql('ALTER TABLE dtb_school DROP COLUMN commitment_uniform_menu_flag');
            }
    
            if (in_array('commitment_uniform_banner_flag', $existingColumns)) {
                $this->addSql('ALTER TABLE dtb_school DROP COLUMN commitment_uniform_banner_flag');
            }
    
            if (in_array('measurement_procedure_banner_flag', $existingColumns)) {
                $this->addSql('ALTER TABLE dtb_school DROP COLUMN measurement_procedure_banner_flag');
            }
    
            if (in_array('return_exchange_banner_flag', $existingColumns)) {
                $this->addSql('ALTER TABLE dtb_school DROP COLUMN return_exchange_banner_flag');
            }
        }
    }