app/DoctrineMigrations/Version20251111000000.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_order_seller_statusテーブルの作成・更新
  9.  */
  10. final class Version20251111000000 extends AbstractMigration
  11. {
  12.     public function getDescription(): string
  13.     {
  14.         return 'dtb_order_seller_statusテーブルの作成または更新';
  15.     }
  16.     public function up(Schema $schema): void
  17.     {
  18.         $platform $this->connection->getDatabasePlatform();
  19.         $schemaManager $this->connection->createSchemaManager();
  20.         
  21.         // テーブルが存在しない場合は作成
  22.         if (!$schemaManager->tablesExist(['dtb_order_seller_status'])) {
  23.             $this->addSql('CREATE TABLE dtb_order_seller_status (
  24.                 id INT UNSIGNED NOT NULL,
  25.                 order_id INT UNSIGNED DEFAULT NULL,
  26.                 seller_id INT UNSIGNED DEFAULT NULL,
  27.                 order_status_id SMALLINT UNSIGNED DEFAULT NULL,
  28.                 discriminator_type VARCHAR(255) NOT NULL,
  29.                 PRIMARY KEY(id),
  30.                 INDEX IDX_5503C9F78D9F6D38 (order_id),
  31.                 INDEX IDX_5503C9F78DE820D9 (seller_id),
  32.                 INDEX IDX_5503C9F7D7707B45 (order_status_id)
  33.             ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin ENGINE = InnoDB');
  34.             return;
  35.         }
  36.         // テーブルが存在する場合、カラムをチェックして必要に応じて追加・変更
  37.         $columns $schemaManager->listTableColumns('dtb_order_seller_status');
  38.         $columnNames array_map(function($column) {
  39.             return $column->getName();
  40.         }, $columns);
  41.         // 各カラムの存在確認と追加
  42.         if (!in_array('id'$columnNames)) {
  43.             $this->addSql('ALTER TABLE dtb_order_seller_status ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST');
  44.         }
  45.         if (!in_array('order_id'$columnNames)) {
  46.             $this->addSql('ALTER TABLE dtb_order_seller_status ADD order_id INT UNSIGNED DEFAULT NULL');
  47.         } else {
  48.             // 型チェックと変更
  49.             $column $columns[array_search('order_id'$columnNames)];
  50.             if ($column->getType()->getName() !== 'integer' || !$column->getUnsigned()) {
  51.                 $this->addSql('ALTER TABLE dtb_order_seller_status MODIFY order_id INT UNSIGNED DEFAULT NULL');
  52.             }
  53.         }
  54.         if (!in_array('seller_id'$columnNames)) {
  55.             $this->addSql('ALTER TABLE dtb_order_seller_status ADD seller_id INT UNSIGNED DEFAULT NULL');
  56.         } else {
  57.             // 型チェックと変更
  58.             $column $columns[array_search('seller_id'$columnNames)];
  59.             if ($column->getType()->getName() !== 'integer' || !$column->getUnsigned()) {
  60.                 $this->addSql('ALTER TABLE dtb_order_seller_status MODIFY seller_id INT UNSIGNED DEFAULT NULL');
  61.             }
  62.         }
  63.         if (!in_array('order_status_id'$columnNames)) {
  64.             $this->addSql('ALTER TABLE dtb_order_seller_status ADD order_status_id SMALLINT UNSIGNED DEFAULT NULL');
  65.         } else {
  66.             // 型チェックと変更
  67.             $column $columns[array_search('order_status_id'$columnNames)];
  68.             if ($column->getType()->getName() !== 'smallint' || !$column->getUnsigned()) {
  69.                 $this->addSql('ALTER TABLE dtb_order_seller_status MODIFY order_status_id SMALLINT UNSIGNED DEFAULT NULL');
  70.             }
  71.         }
  72.         if (!in_array('discriminator_type'$columnNames)) {
  73.             $this->addSql('ALTER TABLE dtb_order_seller_status ADD discriminator_type VARCHAR(255) NOT NULL');
  74.         } else {
  75.             // 型チェックと変更
  76.             $column $columns[array_search('discriminator_type'$columnNames)];
  77.             if ($column->getType()->getName() !== 'string' || $column->getLength() !== 255 || $column->getNotnull() !== true) {
  78.                 $this->addSql('ALTER TABLE dtb_order_seller_status MODIFY discriminator_type VARCHAR(255) NOT NULL');
  79.             }
  80.         }
  81.         // インデックスの確認と追加
  82.         $indexes $schemaManager->listTableIndexes('dtb_order_seller_status');
  83.         $indexNames array_keys($indexes);
  84.         if (!in_array('idx_5503c9f78d9f6d38'array_map('strtolower'$indexNames))) {
  85.             $this->addSql('CREATE INDEX IDX_5503C9F78D9F6D38 ON dtb_order_seller_status (order_id)');
  86.         }
  87.         if (!in_array('idx_5503c9f78de820d9'array_map('strtolower'$indexNames))) {
  88.             $this->addSql('CREATE INDEX IDX_5503C9F78DE820D9 ON dtb_order_seller_status (seller_id)');
  89.         }
  90.         if (!in_array('idx_5503c9f7d7707b45'array_map('strtolower'$indexNames))) {
  91.             $this->addSql('CREATE INDEX IDX_5503C9F7D7707B45 ON dtb_order_seller_status (order_status_id)');
  92.         }
  93.     }
  94.     public function down(Schema $schema): void
  95.     {
  96.         // ダウングレード時はテーブルを削除
  97.         $this->addSql('DROP TABLE IF EXISTS dtb_order_seller_status');
  98.     }
  99. }