app/DoctrineMigrations/Version20251021110000.php line 1

Open in your IDE?
  1. <?php
    
    declare(strict_types=1);
    
    namespace DoctrineMigrations;
    
    use Doctrine\DBAL\Schema\Schema;
    use Doctrine\Migrations\AbstractMigration;
    
    /**
     * データベースバックアップ履歴テーブルの作成
     */
    final class Version20251021110000 extends AbstractMigration
    {
        public function getDescription(): string
        {
            return 'データベースバックアップ履歴を管理するdtb_database_backupテーブルを作成';
        }
    
        public function up(Schema $schema): void
        {
            $schemaManager = $this->connection->createSchemaManager();
            
            // テーブルが既に存在する場合はスキップ
            if ($schemaManager->tablesExist(['dtb_database_backup'])) {
                return;
            }
    
            // MySQLの場合
            if ($this->connection->getDatabasePlatform()->getName() === 'mysql') {
                $this->addSql('
                    CREATE TABLE dtb_database_backup (
                        id INT UNSIGNED AUTO_INCREMENT NOT NULL,
                        file_name VARCHAR(255) NOT NULL,
                        file_path VARCHAR(4000) DEFAULT NULL,
                        file_size BIGINT UNSIGNED DEFAULT NULL,
                        backup_type VARCHAR(50) NOT NULL,
                        note VARCHAR(4000) DEFAULT NULL,
                        create_date DATETIME NOT NULL COMMENT \'(DC2Type:datetimetz)\',
                        update_date DATETIME NOT NULL COMMENT \'(DC2Type:datetimetz)\',
                        creator_id INT UNSIGNED DEFAULT NULL,
                        discriminator_type VARCHAR(255) NOT NULL,
                        INDEX IDX_DB_BACKUP_CREATOR (creator_id),
                        INDEX IDX_DB_BACKUP_TYPE (backup_type),
                        INDEX IDX_DB_BACKUP_CREATE_DATE (create_date),
                        PRIMARY KEY(id)
                    ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin ENGINE = InnoDB
                ');
    
                $this->addSql('
                    ALTER TABLE dtb_database_backup 
                    ADD CONSTRAINT FK_577BF5EB61220EA6 
                    FOREIGN KEY (creator_id) REFERENCES dtb_member (id)
                ');
            }
            // PostgreSQLの場合
            elseif ($this->connection->getDatabasePlatform()->getName() === 'postgresql') {
                $this->addSql('
                    CREATE TABLE dtb_database_backup (
                        id SERIAL NOT NULL,
                        file_name VARCHAR(255) NOT NULL,
                        file_path VARCHAR(4000) DEFAULT NULL,
                        file_size BIGINT DEFAULT NULL,
                        backup_type VARCHAR(50) NOT NULL,
                        note VARCHAR(4000) DEFAULT NULL,
                        create_date TIMESTAMP(0) WITH TIME ZONE NOT NULL,
                        update_date TIMESTAMP(0) WITH TIME ZONE NOT NULL,
                        creator_id INT DEFAULT NULL,
                        discriminator_type VARCHAR(255) NOT NULL,
                        PRIMARY KEY(id)
                    )
                ');
    
                $this->addSql('CREATE INDEX IDX_DB_BACKUP_CREATOR ON dtb_database_backup (creator_id)');
                $this->addSql('CREATE INDEX IDX_DB_BACKUP_TYPE ON dtb_database_backup (backup_type)');
                $this->addSql('CREATE INDEX IDX_DB_BACKUP_CREATE_DATE ON dtb_database_backup (create_date)');
    
                $this->addSql('
                    ALTER TABLE dtb_database_backup 
                    ADD CONSTRAINT FK_577BF5EB61220EA6 
                    FOREIGN KEY (creator_id) REFERENCES dtb_member (id) NOT DEFERRABLE INITIALLY IMMEDIATE
                ');
            }
        }
    
        public function down(Schema $schema): void
        {
            $schemaManager = $this->connection->createSchemaManager();
            
            // テーブルが存在しない場合はスキップ
            if (!$schemaManager->tablesExist(['dtb_database_backup'])) {
                return;
            }
    
            // MySQLの場合
            if ($this->connection->getDatabasePlatform()->getName() === 'mysql') {
                // 外部キー制約を削除
                $this->addSql('ALTER TABLE dtb_database_backup DROP FOREIGN KEY FK_577BF5EB61220EA6');
                // テーブルを削除(インデックスも自動的に削除される)
                $this->addSql('DROP TABLE dtb_database_backup');
            }
            // PostgreSQLの場合
            elseif ($this->connection->getDatabasePlatform()->getName() === 'postgresql') {
                // 外部キー制約を削除
                $this->addSql('ALTER TABLE dtb_database_backup DROP CONSTRAINT FK_577BF5EB61220EA6');
                // インデックスを削除
                $this->addSql('DROP INDEX IF EXISTS IDX_DB_BACKUP_CREATOR');
                $this->addSql('DROP INDEX IF EXISTS IDX_DB_BACKUP_TYPE');
                $this->addSql('DROP INDEX IF EXISTS IDX_DB_BACKUP_CREATE_DATE');
                // テーブルを削除
                $this->addSql('DROP TABLE dtb_database_backup');
            }
        }
    }