app/DoctrineMigrations/Version20251021110000.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.  */
  9. final class Version20251021110000 extends AbstractMigration
  10. {
  11.     public function getDescription(): string
  12.     {
  13.         return 'データベースバックアップ履歴を管理するdtb_database_backupテーブルを作成';
  14.     }
  15.     public function up(Schema $schema): void
  16.     {
  17.         $schemaManager $this->connection->createSchemaManager();
  18.         
  19.         // テーブルが既に存在する場合はスキップ
  20.         if ($schemaManager->tablesExist(['dtb_database_backup'])) {
  21.             return;
  22.         }
  23.         // MySQLの場合
  24.         if ($this->connection->getDatabasePlatform()->getName() === 'mysql') {
  25.             $this->addSql('
  26.                 CREATE TABLE dtb_database_backup (
  27.                     id INT UNSIGNED AUTO_INCREMENT NOT NULL,
  28.                     file_name VARCHAR(255) NOT NULL,
  29.                     file_path VARCHAR(4000) DEFAULT NULL,
  30.                     file_size BIGINT UNSIGNED DEFAULT NULL,
  31.                     backup_type VARCHAR(50) NOT NULL,
  32.                     note VARCHAR(4000) DEFAULT NULL,
  33.                     create_date DATETIME NOT NULL COMMENT \'(DC2Type:datetimetz)\',
  34.                     update_date DATETIME NOT NULL COMMENT \'(DC2Type:datetimetz)\',
  35.                     creator_id INT UNSIGNED DEFAULT NULL,
  36.                     discriminator_type VARCHAR(255) NOT NULL,
  37.                     INDEX IDX_DB_BACKUP_CREATOR (creator_id),
  38.                     INDEX IDX_DB_BACKUP_TYPE (backup_type),
  39.                     INDEX IDX_DB_BACKUP_CREATE_DATE (create_date),
  40.                     PRIMARY KEY(id)
  41.                 ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin ENGINE = InnoDB
  42.             ');
  43.             $this->addSql('
  44.                 ALTER TABLE dtb_database_backup 
  45.                 ADD CONSTRAINT FK_577BF5EB61220EA6 
  46.                 FOREIGN KEY (creator_id) REFERENCES dtb_member (id)
  47.             ');
  48.         }
  49.         // PostgreSQLの場合
  50.         elseif ($this->connection->getDatabasePlatform()->getName() === 'postgresql') {
  51.             $this->addSql('
  52.                 CREATE TABLE dtb_database_backup (
  53.                     id SERIAL NOT NULL,
  54.                     file_name VARCHAR(255) NOT NULL,
  55.                     file_path VARCHAR(4000) DEFAULT NULL,
  56.                     file_size BIGINT DEFAULT NULL,
  57.                     backup_type VARCHAR(50) NOT NULL,
  58.                     note VARCHAR(4000) DEFAULT NULL,
  59.                     create_date TIMESTAMP(0) WITH TIME ZONE NOT NULL,
  60.                     update_date TIMESTAMP(0) WITH TIME ZONE NOT NULL,
  61.                     creator_id INT DEFAULT NULL,
  62.                     discriminator_type VARCHAR(255) NOT NULL,
  63.                     PRIMARY KEY(id)
  64.                 )
  65.             ');
  66.             $this->addSql('CREATE INDEX IDX_DB_BACKUP_CREATOR ON dtb_database_backup (creator_id)');
  67.             $this->addSql('CREATE INDEX IDX_DB_BACKUP_TYPE ON dtb_database_backup (backup_type)');
  68.             $this->addSql('CREATE INDEX IDX_DB_BACKUP_CREATE_DATE ON dtb_database_backup (create_date)');
  69.             $this->addSql('
  70.                 ALTER TABLE dtb_database_backup 
  71.                 ADD CONSTRAINT FK_577BF5EB61220EA6 
  72.                 FOREIGN KEY (creator_id) REFERENCES dtb_member (id) NOT DEFERRABLE INITIALLY IMMEDIATE
  73.             ');
  74.         }
  75.     }
  76.     public function down(Schema $schema): void
  77.     {
  78.         $schemaManager $this->connection->createSchemaManager();
  79.         
  80.         // テーブルが存在しない場合はスキップ
  81.         if (!$schemaManager->tablesExist(['dtb_database_backup'])) {
  82.             return;
  83.         }
  84.         // MySQLの場合
  85.         if ($this->connection->getDatabasePlatform()->getName() === 'mysql') {
  86.             // 外部キー制約を削除
  87.             $this->addSql('ALTER TABLE dtb_database_backup DROP FOREIGN KEY FK_577BF5EB61220EA6');
  88.             // テーブルを削除(インデックスも自動的に削除される)
  89.             $this->addSql('DROP TABLE dtb_database_backup');
  90.         }
  91.         // PostgreSQLの場合
  92.         elseif ($this->connection->getDatabasePlatform()->getName() === 'postgresql') {
  93.             // 外部キー制約を削除
  94.             $this->addSql('ALTER TABLE dtb_database_backup DROP CONSTRAINT FK_577BF5EB61220EA6');
  95.             // インデックスを削除
  96.             $this->addSql('DROP INDEX IF EXISTS IDX_DB_BACKUP_CREATOR');
  97.             $this->addSql('DROP INDEX IF EXISTS IDX_DB_BACKUP_TYPE');
  98.             $this->addSql('DROP INDEX IF EXISTS IDX_DB_BACKUP_CREATE_DATE');
  99.             // テーブルを削除
  100.             $this->addSql('DROP TABLE dtb_database_backup');
  101.         }
  102.     }
  103. }