<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20251119150206 extends AbstractMigration
{
public function getDescription(): string
{
return 'Insert product filter categories with parent-child hierarchy starting from id 1100';
}
public function up(Schema $schema): void
{
// 1. 追加ギガ (Additional Giga) - Parent ID: 1100
$this->addSql('
INSERT INTO dtb_category
(id, parent_category_id, creator_id, category_name, hierarchy, sort_no, is_searchable, create_date, update_date, discriminator_type)
VALUES
(1100, NULL, NULL, \'追加ギガ\', 1, 0, 1, NOW(), NOW(), \'category\')
ON CONFLICT (id) DO UPDATE SET
category_name = EXCLUDED.category_name,
is_searchable = 1,
update_date = NOW()
');
$additionalGigaCategories = [
['id' => 1101, 'category_name' => 'MR1 追加ギガ(国内)'],
['id' => 1102, 'category_name' => 'MR1 追加ギガ(海外)'],
['id' => 1103, 'category_name' => 'U20 追加ギガ(国内)'],
['id' => 1104, 'category_name' => 'U20 追加ギガ(海外)'],
['id' => 1105, 'category_name' => 'U3 追加ギガ(国内)'],
['id' => 1106, 'category_name' => 'U3 追加ギガ(海外)'],
];
foreach ($additionalGigaCategories as $cat) {
$this->addSql('
INSERT INTO dtb_category
(id, parent_category_id, creator_id, category_name, hierarchy, sort_no, is_searchable, create_date, update_date, discriminator_type)
VALUES
(:id, 1100, NULL, :category_name, 2, 0, 1, NOW(), NOW(), \'category\')
ON CONFLICT (id) DO UPDATE SET
parent_category_id = 1100,
category_name = EXCLUDED.category_name,
hierarchy = 2,
is_searchable = 1,
update_date = NOW()
', [
'id' => $cat['id'],
'category_name' => $cat['category_name'],
]);
}
// 2. モデル (Model) - Parent ID: 1107
$this->addSql('
INSERT INTO dtb_category
(id, parent_category_id, creator_id, category_name, hierarchy, sort_no, is_searchable, create_date, update_date, discriminator_type)
VALUES
(1107, NULL, NULL, \'モデル\', 1, 0, 1, NOW(), NOW(), \'category\')
ON CONFLICT (id) DO UPDATE SET
category_name = EXCLUDED.category_name,
is_searchable = 1,
update_date = NOW()
');
$modelCategories = [
['id' => 1108, 'category_name' => 'MR1(タッチパネル液晶)'],
['id' => 1109, 'category_name' => 'U20(軽量・薄型)'],
['id' => 1110, 'category_name' => 'U3(リユース)'],
];
foreach ($modelCategories as $cat) {
$this->addSql('
INSERT INTO dtb_category
(id, parent_category_id, creator_id, category_name, hierarchy, sort_no, is_searchable, create_date, update_date, discriminator_type)
VALUES
(:id, 1107, NULL, :category_name, 2, 0, 1, NOW(), NOW(), \'category\')
ON CONFLICT (id) DO UPDATE SET
parent_category_id = 1107,
category_name = EXCLUDED.category_name,
hierarchy = 2,
is_searchable = 1,
update_date = NOW()
', [
'id' => $cat['id'],
'category_name' => $cat['category_name'],
]);
}
// 3. ギガ/プラン (Giga/Plan) - Parent ID: 1111
$this->addSql('
INSERT INTO dtb_category
(id, parent_category_id, creator_id, category_name, hierarchy, sort_no, is_searchable, create_date, update_date, discriminator_type)
VALUES
(1111, NULL, NULL, \'ギガ/プラン\', 1, 0, 1, NOW(), NOW(), \'category\')
ON CONFLICT (id) DO UPDATE SET
category_name = EXCLUDED.category_name,
is_searchable = 1,
update_date = NOW()
');
$gigaPlanCategories = [
['id' => 1112, 'category_name' => '5GB'],
['id' => 1113, 'category_name' => '10GB'],
['id' => 1114, 'category_name' => '30GB'],
['id' => 1115, 'category_name' => '50GB'],
['id' => 1116, 'category_name' => '100GB'],
['id' => 1117, 'category_name' => '30日無制限'],
];
foreach ($gigaPlanCategories as $cat) {
$this->addSql('
INSERT INTO dtb_category
(id, parent_category_id, creator_id, category_name, hierarchy, sort_no, is_searchable, create_date, update_date, discriminator_type)
VALUES
(:id, 1111, NULL, :category_name, 2, 0, 1, NOW(), NOW(), \'category\')
ON CONFLICT (id) DO UPDATE SET
parent_category_id = 1111,
category_name = EXCLUDED.category_name,
hierarchy = 2,
is_searchable = 1,
update_date = NOW()
', [
'id' => $cat['id'],
'category_name' => $cat['category_name'],
]);
}
// 4. 有効期間 (Validity Period) - Parent ID: 1118
$this->addSql('
INSERT INTO dtb_category
(id, parent_category_id, creator_id, category_name, hierarchy, sort_no, is_searchable, create_date, update_date, discriminator_type)
VALUES
(1118, NULL, NULL, \'有効期間\', 1, 0, 1, NOW(), NOW(), \'category\')
ON CONFLICT (id) DO UPDATE SET
category_name = EXCLUDED.category_name,
is_searchable = 1,
update_date = NOW()
');
$validityPeriodCategories = [
['id' => 1119, 'category_name' => '50日'],
['id' => 1120, 'category_name' => '100日'],
['id' => 1121, 'category_name' => '365日'],
['id' => 1122, 'category_name' => '30日(無制限)'],
];
foreach ($validityPeriodCategories as $cat) {
$this->addSql('
INSERT INTO dtb_category
(id, parent_category_id, creator_id, category_name, hierarchy, sort_no, is_searchable, create_date, update_date, discriminator_type)
VALUES
(:id, 1118, NULL, :category_name, 2, 0, 1, NOW(), NOW(), \'category\')
ON CONFLICT (id) DO UPDATE SET
parent_category_id = 1118,
category_name = EXCLUDED.category_name,
hierarchy = 2,
is_searchable = 1,
update_date = NOW()
', [
'id' => $cat['id'],
'category_name' => $cat['category_name'],
]);
}
}
public function down(Schema $schema): void
{
// Xóa các category con trước (theo thứ tự ngược lại)
// Xóa 有効期間 children (1119-1122)
$validityPeriodIds = [1119, 1120, 1121, 1122];
$this->addSql('DELETE FROM dtb_category WHERE id IN (' . implode(',', $validityPeriodIds) . ')');
// Xóa ギガ/プラン children (1112-1117)
$gigaPlanIds = [1112, 1113, 1114, 1115, 1116, 1117];
$this->addSql('DELETE FROM dtb_category WHERE id IN (' . implode(',', $gigaPlanIds) . ')');
// Xóa モデル children (1108-1110)
$modelIds = [1108, 1109, 1110];
$this->addSql('DELETE FROM dtb_category WHERE id IN (' . implode(',', $modelIds) . ')');
// Xóa 追加ギガ children (1101-1106)
$additionalGigaIds = [1101, 1102, 1103, 1104, 1105, 1106];
$this->addSql('DELETE FROM dtb_category WHERE id IN (' . implode(',', $additionalGigaIds) . ')');
// Xóa các category cha
$parentIds = [1118, 1111, 1107, 1100];
$this->addSql('DELETE FROM dtb_category WHERE id IN (' . implode(',', $parentIds) . ')');
}
}