<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* plg_claim_pdfテーブルのインデックスと外部キーを再作成
*/
final class Version20251119163454 extends AbstractMigration
{
public function getDescription(): string
{
return 'plg_claim_pdfテーブルのインデックスと外部キー制約を正しい順序で再作成';
}
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 = 'plg_claim_pdf'
AND CONSTRAINT_TYPE = 'FOREIGN KEY'
");
foreach ($foreignKeys as $fk) {
$this->addSql("ALTER TABLE plg_claim_pdf 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 = 'plg_claim_pdf'
AND INDEX_NAME = 'idx_seller_output_name'
");
foreach ($indexes as $index) {
$this->addSql("DROP INDEX " . $index['INDEX_NAME'] . " ON plg_claim_pdf");
}
// 新しいインデックスを作成(既に存在する場合はスキップ)
$newIndexes = $this->connection->fetchAllAssociative("
SELECT DISTINCT INDEX_NAME
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'plg_claim_pdf'
AND INDEX_NAME = 'IDX_4AC5FA311A1C4E0E'
");
if (empty($newIndexes)) {
$this->addSql("CREATE INDEX IDX_4AC5FA311A1C4E0E ON plg_claim_pdf (seller_output_name_id)");
}
// 外部キー制約を作成(既に存在する場合はスキップ)
$newForeignKeys = $this->connection->fetchAllAssociative("
SELECT CONSTRAINT_NAME
FROM information_schema.TABLE_CONSTRAINTS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'plg_claim_pdf'
AND CONSTRAINT_TYPE = 'FOREIGN KEY'
AND CONSTRAINT_NAME = 'FK_4AC5FA311A1C4E0E'
");
if (empty($newForeignKeys)) {
$this->addSql("
ALTER TABLE plg_claim_pdf
ADD CONSTRAINT FK_4AC5FA311A1C4E0E
FOREIGN KEY (seller_output_name_id) REFERENCES dtb_seller_output_name (id)
");
}
}
public function down(Schema $schema): void
{
// 必要に応じてロールバック処理を記述
}
}