app/DoctrineMigrations/Version20251114100000.php line 1

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace DoctrineMigrations;
  4. use Doctrine\DBAL\Schema\Schema;
  5. use Doctrine\Migrations\AbstractMigration;
  6. /**
  7.  * ユーザー画面のメニュー・バナー表示制御フラグの追加
  8.  * dtb_schoolテーブルに以下のカラムを追加:
  9.  * - shopping_guide_menu_flag (お買い物ガイドメニュー)
  10.  * - shopping_guide_banner_flag (お買い物ガイドバナー)
  11.  * - correct_size_menu_flag (サイズの選び方メニュー)
  12.  * - correct_size_banner_flag (サイズの選び方バナー)
  13.  * - commitment_uniform_menu_flag (制服へのこだわりメニュー)
  14.  * - commitment_uniform_banner_flag (制服へのこだわりバナー)
  15.  * - measurement_procedure_banner_flag (採寸の手順バナー)
  16.  * - return_exchange_banner_flag (返品交換についてバナー)
  17.  */
  18. final class Version20251114100000 extends AbstractMigration
  19. {
  20.     public function getDescription(): string
  21.     {
  22.         return 'dtb_schoolテーブルにメニュー・バナー表示制御フラグを追加';
  23.     }
  24.     public function up(Schema $schema): void
  25.     {
  26.         // MySQLの場合のみ実行
  27.         if ($this->connection->getDatabasePlatform()->getName() !== 'mysql') {
  28.             return;
  29.         }
  30.         // カラムの存在確認
  31.         $sql "SELECT COLUMN_NAME FROM information_schema.COLUMNS 
  32.                 WHERE TABLE_SCHEMA = DATABASE() 
  33.                 AND TABLE_NAME = 'dtb_school' 
  34.                 AND COLUMN_NAME IN (
  35.                     'shopping_guide_menu_flag',
  36.                     'shopping_guide_banner_flag',
  37.                     'correct_size_menu_flag',
  38.                     'correct_size_banner_flag',
  39.                     'commitment_uniform_menu_flag',
  40.                     'commitment_uniform_banner_flag',
  41.                     'measurement_procedure_banner_flag',
  42.                     'return_exchange_banner_flag'
  43.                 )";
  44.         
  45.         $existingColumns array_column($this->connection->fetchAllAssociative($sql), 'COLUMN_NAME');
  46.         // 各フラグカラムを追加
  47.         if (!in_array('shopping_guide_menu_flag'$existingColumns)) {
  48.             $this->addSql('ALTER TABLE dtb_school ADD shopping_guide_menu_flag SMALLINT UNSIGNED DEFAULT 1 COMMENT \'お買い物ガイドメニュー表示フラグ\'');
  49.         } else {
  50.             // 既存カラムのデフォルト値を変更
  51.             $this->addSql('ALTER TABLE dtb_school MODIFY shopping_guide_menu_flag SMALLINT UNSIGNED DEFAULT 1 COMMENT \'お買い物ガイドメニュー表示フラグ\'');
  52.         }
  53.         if (!in_array('shopping_guide_banner_flag'$existingColumns)) {
  54.             $this->addSql('ALTER TABLE dtb_school ADD shopping_guide_banner_flag SMALLINT UNSIGNED DEFAULT 1 COMMENT \'お買い物ガイドバナー表示フラグ\'');
  55.         } else {
  56.             $this->addSql('ALTER TABLE dtb_school MODIFY shopping_guide_banner_flag SMALLINT UNSIGNED DEFAULT 1 COMMENT \'お買い物ガイドバナー表示フラグ\'');
  57.         }
  58.         if (!in_array('correct_size_menu_flag'$existingColumns)) {
  59.             $this->addSql('ALTER TABLE dtb_school ADD correct_size_menu_flag SMALLINT UNSIGNED DEFAULT 1 COMMENT \'サイズの選び方メニュー表示フラグ\'');
  60.         } else {
  61.             $this->addSql('ALTER TABLE dtb_school MODIFY correct_size_menu_flag SMALLINT UNSIGNED DEFAULT 1 COMMENT \'サイズの選び方メニュー表示フラグ\'');
  62.         }
  63.         if (!in_array('correct_size_banner_flag'$existingColumns)) {
  64.             $this->addSql('ALTER TABLE dtb_school ADD correct_size_banner_flag SMALLINT UNSIGNED DEFAULT 1 COMMENT \'サイズの選び方バナー表示フラグ\'');
  65.         } else {
  66.             $this->addSql('ALTER TABLE dtb_school MODIFY correct_size_banner_flag SMALLINT UNSIGNED DEFAULT 1 COMMENT \'サイズの選び方バナー表示フラグ\'');
  67.         }
  68.         if (!in_array('commitment_uniform_menu_flag'$existingColumns)) {
  69.             $this->addSql('ALTER TABLE dtb_school ADD commitment_uniform_menu_flag SMALLINT UNSIGNED DEFAULT 1 COMMENT \'制服へのこだわりメニュー表示フラグ\'');
  70.         } else {
  71.             $this->addSql('ALTER TABLE dtb_school MODIFY commitment_uniform_menu_flag SMALLINT UNSIGNED DEFAULT 1 COMMENT \'制服へのこだわりメニュー表示フラグ\'');
  72.         }
  73.         if (!in_array('commitment_uniform_banner_flag'$existingColumns)) {
  74.             $this->addSql('ALTER TABLE dtb_school ADD commitment_uniform_banner_flag SMALLINT UNSIGNED DEFAULT 1 COMMENT \'制服へのこだわりバナー表示フラグ\'');
  75.         } else {
  76.             $this->addSql('ALTER TABLE dtb_school MODIFY commitment_uniform_banner_flag SMALLINT UNSIGNED DEFAULT 1 COMMENT \'制服へのこだわりバナー表示フラグ\'');
  77.         }
  78.         if (!in_array('measurement_procedure_banner_flag'$existingColumns)) {
  79.             $this->addSql('ALTER TABLE dtb_school ADD measurement_procedure_banner_flag SMALLINT UNSIGNED DEFAULT 0 COMMENT \'採寸の手順バナー表示フラグ\'');
  80.         } else {
  81.             $this->addSql('ALTER TABLE dtb_school MODIFY measurement_procedure_banner_flag SMALLINT UNSIGNED DEFAULT 0 COMMENT \'採寸の手順バナー表示フラグ\'');
  82.         }
  83.         if (!in_array('return_exchange_banner_flag'$existingColumns)) {
  84.             $this->addSql('ALTER TABLE dtb_school ADD return_exchange_banner_flag SMALLINT UNSIGNED DEFAULT 0 COMMENT \'返品交換についてバナー表示フラグ\'');
  85.         } else {
  86.             $this->addSql('ALTER TABLE dtb_school MODIFY return_exchange_banner_flag SMALLINT UNSIGNED DEFAULT 0 COMMENT \'返品交換についてバナー表示フラグ\'');
  87.         }
  88.         // 既存データのデフォルト値を更新(NULL値のみ)
  89.         $this->addSql('UPDATE dtb_school SET shopping_guide_menu_flag = 1 WHERE shopping_guide_menu_flag IS NULL');
  90.         $this->addSql('UPDATE dtb_school SET shopping_guide_banner_flag = 1 WHERE shopping_guide_banner_flag IS NULL');
  91.         $this->addSql('UPDATE dtb_school SET correct_size_menu_flag = 1 WHERE correct_size_menu_flag IS NULL');
  92.         $this->addSql('UPDATE dtb_school SET correct_size_banner_flag = 1 WHERE correct_size_banner_flag IS NULL');
  93.         $this->addSql('UPDATE dtb_school SET commitment_uniform_menu_flag = 1 WHERE commitment_uniform_menu_flag IS NULL');
  94.         $this->addSql('UPDATE dtb_school SET commitment_uniform_banner_flag = 1 WHERE commitment_uniform_banner_flag IS NULL');
  95.         $this->addSql('UPDATE dtb_school SET measurement_procedure_banner_flag = 0 WHERE measurement_procedure_banner_flag IS NULL');
  96.         $this->addSql('UPDATE dtb_school SET return_exchange_banner_flag = 0 WHERE return_exchange_banner_flag IS NULL');
  97.     }
  98.     public function down(Schema $schema): void
  99.     {
  100.         // MySQLの場合のみ実行
  101.         if ($this->connection->getDatabasePlatform()->getName() !== 'mysql') {
  102.             return;
  103.         }
  104.         // カラムの存在確認
  105.         $sql "SELECT COLUMN_NAME FROM information_schema.COLUMNS 
  106.                 WHERE TABLE_SCHEMA = DATABASE() 
  107.                 AND TABLE_NAME = 'dtb_school' 
  108.                 AND COLUMN_NAME IN (
  109.                     'shopping_guide_menu_flag',
  110.                     'shopping_guide_banner_flag',
  111.                     'correct_size_menu_flag',
  112.                     'correct_size_banner_flag',
  113.                     'commitment_uniform_menu_flag',
  114.                     'commitment_uniform_banner_flag',
  115.                     'measurement_procedure_banner_flag',
  116.                     'return_exchange_banner_flag'
  117.                 )";
  118.         
  119.         $existingColumns array_column($this->connection->fetchAllAssociative($sql), 'COLUMN_NAME');
  120.         // 各フラグカラムを削除
  121.         if (in_array('shopping_guide_menu_flag'$existingColumns)) {
  122.             $this->addSql('ALTER TABLE dtb_school DROP COLUMN shopping_guide_menu_flag');
  123.         }
  124.         if (in_array('shopping_guide_banner_flag'$existingColumns)) {
  125.             $this->addSql('ALTER TABLE dtb_school DROP COLUMN shopping_guide_banner_flag');
  126.         }
  127.         if (in_array('correct_size_menu_flag'$existingColumns)) {
  128.             $this->addSql('ALTER TABLE dtb_school DROP COLUMN correct_size_menu_flag');
  129.         }
  130.         if (in_array('correct_size_banner_flag'$existingColumns)) {
  131.             $this->addSql('ALTER TABLE dtb_school DROP COLUMN correct_size_banner_flag');
  132.         }
  133.         if (in_array('commitment_uniform_menu_flag'$existingColumns)) {
  134.             $this->addSql('ALTER TABLE dtb_school DROP COLUMN commitment_uniform_menu_flag');
  135.         }
  136.         if (in_array('commitment_uniform_banner_flag'$existingColumns)) {
  137.             $this->addSql('ALTER TABLE dtb_school DROP COLUMN commitment_uniform_banner_flag');
  138.         }
  139.         if (in_array('measurement_procedure_banner_flag'$existingColumns)) {
  140.             $this->addSql('ALTER TABLE dtb_school DROP COLUMN measurement_procedure_banner_flag');
  141.         }
  142.         if (in_array('return_exchange_banner_flag'$existingColumns)) {
  143.             $this->addSql('ALTER TABLE dtb_school DROP COLUMN return_exchange_banner_flag');
  144.         }
  145.     }
  146. }