app/DoctrineMigrations/Version20251126100000.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テーブルにstore_info_menu_flagカラムを追加
     */
    final class Version20251126100000 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 = 'store_info_menu_flag'";
            
            $existingColumns = array_column($this->connection->fetchAllAssociative($sql), 'COLUMN_NAME');
    
            // 店舗情報メニューフラグカラムを追加
            if (!in_array('store_info_menu_flag', $existingColumns)) {
                $this->addSql('ALTER TABLE dtb_school ADD store_info_menu_flag SMALLINT UNSIGNED DEFAULT 1 COMMENT \'店舗情報メニュー表示フラグ\'');
            } else {
                // 既存カラムのデフォルト値を変更
                $this->addSql('ALTER TABLE dtb_school MODIFY store_info_menu_flag SMALLINT UNSIGNED DEFAULT 1 COMMENT \'店舗情報メニュー表示フラグ\'');
            }
    
            // 既存データのデフォルト値を更新(NULL値のみ)
            $this->addSql('UPDATE dtb_school SET store_info_menu_flag = 1 WHERE store_info_menu_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 = 'store_info_menu_flag'";
            
            $existingColumns = array_column($this->connection->fetchAllAssociative($sql), 'COLUMN_NAME');
    
            // 店舗情報メニューフラグカラムを削除
            if (in_array('store_info_menu_flag', $existingColumns)) {
                $this->addSql('ALTER TABLE dtb_school DROP COLUMN store_info_menu_flag');
            }
        }
    }