<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* dtb_school_brother_displayテーブルのインデックスと外部キーを再作成
*/
final class Version20251119163203 extends AbstractMigration
{
public function getDescription(): string
{
return 'dtb_school_brother_displayテーブルのインデックスと外部キー制約を正しい順序で再作成';
}
public function up(Schema $schema): void
{
// MySQLの場合のみ実行
if ($this->connection->getDatabasePlatform()->getName() !== 'mysql') {
return;
}
// 既存の外部キー制約を確認して削除
$foreignKeys = $this->connection->fetchAllAssociative("
SELECT CONSTRAINT_NAME
FROM information_schema.TABLE_CONSTRAINTS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'dtb_school_brother_display'
AND CONSTRAINT_TYPE = 'FOREIGN KEY'
");
foreach ($foreignKeys as $fk) {
$this->addSql("ALTER TABLE dtb_school_brother_display DROP FOREIGN KEY " . $fk['CONSTRAINT_NAME']);
}
// 古いインデックスを削除
$indexes = $this->connection->fetchAllAssociative("
SELECT DISTINCT INDEX_NAME
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'dtb_school_brother_display'
AND INDEX_NAME IN ('idx_school_brother_display_base_school', 'idx_school_brother_display_target_school')
");
foreach ($indexes as $index) {
$this->addSql("DROP INDEX " . $index['INDEX_NAME'] . " ON dtb_school_brother_display");
}
// 新しいインデックスが既に存在する場合は削除
$existingIndexes = $this->connection->fetchAllAssociative("
SELECT DISTINCT INDEX_NAME
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'dtb_school_brother_display'
AND INDEX_NAME IN ('IDX_54988867006D663', 'IDX_5498886F79E35C2')
");
foreach ($existingIndexes as $index) {
$this->addSql("DROP INDEX " . $index['INDEX_NAME'] . " ON dtb_school_brother_display");
}
// 新しいインデックスを作成
$this->addSql("CREATE INDEX IDX_54988867006D663 ON dtb_school_brother_display (base_school_id)");
$this->addSql("CREATE INDEX IDX_5498886F79E35C2 ON dtb_school_brother_display (target_school_id)");
// 外部キー制約を作成
$this->addSql("
ALTER TABLE dtb_school_brother_display
ADD CONSTRAINT FK_54988867006D663
FOREIGN KEY (base_school_id) REFERENCES dtb_school (school_id)
");
$this->addSql("
ALTER TABLE dtb_school_brother_display
ADD CONSTRAINT FK_5498886F79E35C2
FOREIGN KEY (target_school_id) REFERENCES dtb_school (school_id)
");
}
public function down(Schema $schema): void
{
// 必要に応じてロールバック処理を記述
}
}