<?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");
}
}
}