<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* dtb_csvにフィールドを追加するマイグレーション
* - 予約CSV(csv_type_id=6)に性別項目を追加
* - 会員CSV(csv_type_id=2)にフリー項目1、フリー項目2を追加
*/
final class Version20251223000000 extends AbstractMigration
{
const NAME = 'dtb_csv';
public function getDescription(): string
{
return '予約CSVに性別項目を追加、会員CSVにフリー項目1・2を追加';
}
public function up(Schema $schema): void
{
if (!$schema->hasTable(self::NAME)) {
return;
}
// 予約CSV(csv_type_id=6)に性別項目を追加
$reserveSexExists = $this->connection->fetchOne(
"SELECT COUNT(*) FROM dtb_csv WHERE csv_type_id = 6 AND entity_name = ? AND field_name = 'Customer' AND reference_field_name = 'Sex' AND disp_name = '性別'",
['Customize\\Entity\\Reserve']
);
if ($reserveSexExists == 0) {
// 予約CSVの現在の最大sort_noを取得
$maxSortNo = $this->connection->fetchOne(
"SELECT MAX(sort_no) FROM dtb_csv WHERE csv_type_id = 6"
);
$nextSortNo = ($maxSortNo !== null && $maxSortNo !== false) ? $maxSortNo + 1 : 1;
$this->addSql("INSERT INTO dtb_csv (csv_type_id, creator_id, entity_name, field_name, reference_field_name, disp_name, sort_no, enabled, create_date, update_date, discriminator_type) VALUES (6, 1, 'Customize\\\\Entity\\\\Reserve', 'Customer', 'Sex', '性別', ?, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'csv')", [$nextSortNo]);
}
// 会員CSV(csv_type_id=2)にフリー項目1を追加
$customerFree1Exists = $this->connection->fetchOne(
"SELECT COUNT(*) FROM dtb_csv WHERE csv_type_id = 2 AND entity_name = ? AND field_name = 'free1' AND disp_name = 'フリー項目1'",
['Eccube\\Entity\\Customer']
);
if ($customerFree1Exists == 0) {
// 会員CSVの現在の最大sort_noを取得
$maxSortNo = $this->connection->fetchOne(
"SELECT MAX(sort_no) FROM dtb_csv WHERE csv_type_id = 2"
);
$nextSortNo = ($maxSortNo !== null && $maxSortNo !== false) ? $maxSortNo + 1 : 1;
$this->addSql("INSERT INTO dtb_csv (csv_type_id, creator_id, entity_name, field_name, disp_name, sort_no, enabled, create_date, update_date, discriminator_type) VALUES (2, 1, 'Eccube\\\\Entity\\\\Customer', 'free1', 'フリー項目1', ?, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'csv')", [$nextSortNo]);
}
// 会員CSV(csv_type_id=2)にフリー項目2を追加
$customerFree2Exists = $this->connection->fetchOne(
"SELECT COUNT(*) FROM dtb_csv WHERE csv_type_id = 2 AND entity_name = ? AND field_name = 'free2' AND disp_name = 'フリー項目2'",
['Eccube\\Entity\\Customer']
);
if ($customerFree2Exists == 0) {
// 会員CSVの現在の最大sort_noを取得(再度取得して最新の値を使用)
$maxSortNo = $this->connection->fetchOne(
"SELECT MAX(sort_no) FROM dtb_csv WHERE csv_type_id = 2"
);
$nextSortNo = ($maxSortNo !== null && $maxSortNo !== false) ? $maxSortNo + 1 : 1;
$this->addSql("INSERT INTO dtb_csv (csv_type_id, creator_id, entity_name, field_name, disp_name, sort_no, enabled, create_date, update_date, discriminator_type) VALUES (2, 1, 'Eccube\\\\Entity\\\\Customer', 'free2', 'フリー項目2', ?, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'csv')", [$nextSortNo]);
}
}
public function down(Schema $schema): void
{
// 追加したCSVフィールドを削除
$this->addSql("DELETE FROM dtb_csv WHERE csv_type_id = 6 AND entity_name = 'Customize\\\\Entity\\\\Reserve' AND field_name = 'Customer' AND reference_field_name = 'Sex' AND disp_name = '性別'");
$this->addSql("DELETE FROM dtb_csv WHERE csv_type_id = 2 AND entity_name = 'Eccube\\\\Entity\\\\Customer' AND field_name = 'free1' AND disp_name = 'フリー項目1'");
$this->addSql("DELETE FROM dtb_csv WHERE csv_type_id = 2 AND entity_name = 'Eccube\\\\Entity\\\\Customer' AND field_name = 'free2' AND disp_name = 'フリー項目2'");
}
}