app/DoctrineMigrations/Version20251027000000.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 Version20251027000000 extends AbstractMigration
    {
        public function up(Schema $schema): void
        {
            $schemaManager = $this->connection->createSchemaManager();
            
            // dtb_seller_output_nameテーブルが存在しない場合のみ作成
            if (!$schemaManager->tablesExist(['dtb_seller_output_name'])) {
                // 販売元出力名テーブルの作成
                $this->addSql("
                    CREATE TABLE dtb_seller_output_name (
                        id INT UNSIGNED AUTO_INCREMENT NOT NULL,
                        seller_name VARCHAR(255) NOT NULL,
                        company_name VARCHAR(255) DEFAULT NULL,
                        postal_code VARCHAR(8) DEFAULT NULL,
                        pref VARCHAR(255) DEFAULT NULL,
                        addr01 VARCHAR(255) DEFAULT NULL,
                        addr02 VARCHAR(255) DEFAULT NULL,
                        phone_number VARCHAR(14) DEFAULT NULL,
                        fax_number VARCHAR(14) DEFAULT NULL,
                        email VARCHAR(255) DEFAULT NULL,
                        invoice_registration_number VARCHAR(255) DEFAULT NULL,
                        sort_no INT UNSIGNED NOT NULL DEFAULT 0,
                        discriminator_type VARCHAR(255) NOT NULL,
                        create_date DATETIME NOT NULL COMMENT '(DC2Type:datetimetz)',
                        update_date DATETIME NOT NULL COMMENT '(DC2Type:datetimetz)',
                        PRIMARY KEY(id)
                    ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci ENGINE = InnoDB
                ");
                
                // デフォルトデータの挿入(基本情報から取得したデータで初期化)
                $this->addSql("
                    INSERT INTO dtb_seller_output_name 
                    (seller_name, company_name, postal_code, addr01, addr02, phone_number, email, invoice_registration_number, sort_no, discriminator_type, create_date, update_date)
                    SELECT 
                        shop_name,
                        company_name,
                        postal_code,
                        addr01,
                        addr02,
                        phone_number,
                        email01,
                        invoice_registration_number,
                        0,
                        'selleroutputname',
                        NOW(),
                        NOW()
                    FROM dtb_base_info
                    LIMIT 1
                ");
            }
            
            // plg_claim_pdfテーブルが存在し、seller_output_name_idカラムが存在しない場合のみ追加
            if ($schemaManager->tablesExist(['plg_claim_pdf'])) {
                $columns = $schemaManager->listTableColumns('plg_claim_pdf');
                $columnNames = array_map(function($column) {
                    return $column->getName();
                }, $columns);
                
                if (!in_array('seller_output_name_id', $columnNames)) {
                    // plg_claim_pdf テーブルに販売元出力名ID カラムを追加
                    $this->addSql("
                        ALTER TABLE plg_claim_pdf 
                        ADD COLUMN seller_output_name_id INT UNSIGNED DEFAULT NULL AFTER member_id,
                        ADD INDEX IDX_SELLER_OUTPUT_NAME (seller_output_name_id)
                    ");
                }
            }
        }
    
        public function down(Schema $schema): void
        {
            $schemaManager = $this->connection->createSchemaManager();
            
            // plg_claim_pdf テーブルから販売元出力名ID カラムを削除
            if ($schemaManager->tablesExist(['plg_claim_pdf'])) {
                $columns = $schemaManager->listTableColumns('plg_claim_pdf');
                $columnNames = array_map(function($column) {
                    return $column->getName();
                }, $columns);
                
                if (in_array('seller_output_name_id', $columnNames)) {
                    $this->addSql("ALTER TABLE plg_claim_pdf DROP INDEX IDX_SELLER_OUTPUT_NAME");
                    $this->addSql("ALTER TABLE plg_claim_pdf DROP COLUMN seller_output_name_id");
                }
            }
    
            // 販売元出力名テーブルの削除
            if ($schemaManager->tablesExist(['dtb_seller_output_name'])) {
                $this->addSql("DROP TABLE dtb_seller_output_name");
            }
        }
    }