app/DoctrineMigrations/Version20251119163454.php line 1

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace DoctrineMigrations;
  4. use Doctrine\DBAL\Schema\Schema;
  5. use Doctrine\Migrations\AbstractMigration;
  6. /**
  7.  * plg_claim_pdfテーブルのインデックスと外部キーを再作成
  8.  */
  9. final class Version20251119163454 extends AbstractMigration
  10. {
  11.     public function getDescription(): string
  12.     {
  13.         return 'plg_claim_pdfテーブルのインデックスと外部キー制約を正しい順序で再作成';
  14.     }
  15.     public function up(Schema $schema): void
  16.     {
  17.         // MySQLの場合のみ実行
  18.         if ($this->connection->getDatabasePlatform()->getName() !== 'mysql') {
  19.             return;
  20.         }
  21.         // 既存の外部キー制約を確認して削除
  22.         $foreignKeys $this->connection->fetchAllAssociative("
  23.             SELECT CONSTRAINT_NAME 
  24.             FROM information_schema.TABLE_CONSTRAINTS 
  25.             WHERE TABLE_SCHEMA = DATABASE() 
  26.             AND TABLE_NAME = 'plg_claim_pdf' 
  27.             AND CONSTRAINT_TYPE = 'FOREIGN KEY'
  28.         ");
  29.         
  30.         foreach ($foreignKeys as $fk) {
  31.             $this->addSql("ALTER TABLE plg_claim_pdf DROP FOREIGN KEY " $fk['CONSTRAINT_NAME']);
  32.         }
  33.         
  34.         // 古いインデックスを削除
  35.         $indexes $this->connection->fetchAllAssociative("
  36.             SELECT DISTINCT INDEX_NAME 
  37.             FROM information_schema.STATISTICS 
  38.             WHERE TABLE_SCHEMA = DATABASE() 
  39.             AND TABLE_NAME = 'plg_claim_pdf' 
  40.             AND INDEX_NAME = 'idx_seller_output_name'
  41.         ");
  42.         
  43.         foreach ($indexes as $index) {
  44.             $this->addSql("DROP INDEX " $index['INDEX_NAME'] . " ON plg_claim_pdf");
  45.         }
  46.         
  47.         // 新しいインデックスを作成(既に存在する場合はスキップ)
  48.         $newIndexes $this->connection->fetchAllAssociative("
  49.             SELECT DISTINCT INDEX_NAME 
  50.             FROM information_schema.STATISTICS 
  51.             WHERE TABLE_SCHEMA = DATABASE() 
  52.             AND TABLE_NAME = 'plg_claim_pdf' 
  53.             AND INDEX_NAME = 'IDX_4AC5FA311A1C4E0E'
  54.         ");
  55.         
  56.         if (empty($newIndexes)) {
  57.             $this->addSql("CREATE INDEX IDX_4AC5FA311A1C4E0E ON plg_claim_pdf (seller_output_name_id)");
  58.         }
  59.         
  60.         // 外部キー制約を作成(既に存在する場合はスキップ)
  61.         $newForeignKeys $this->connection->fetchAllAssociative("
  62.             SELECT CONSTRAINT_NAME 
  63.             FROM information_schema.TABLE_CONSTRAINTS 
  64.             WHERE TABLE_SCHEMA = DATABASE() 
  65.             AND TABLE_NAME = 'plg_claim_pdf' 
  66.             AND CONSTRAINT_TYPE = 'FOREIGN KEY'
  67.             AND CONSTRAINT_NAME = 'FK_4AC5FA311A1C4E0E'
  68.         ");
  69.         
  70.         if (empty($newForeignKeys)) {
  71.             $this->addSql("
  72.                 ALTER TABLE plg_claim_pdf 
  73.                 ADD CONSTRAINT FK_4AC5FA311A1C4E0E 
  74.                 FOREIGN KEY (seller_output_name_id) REFERENCES dtb_seller_output_name (id)
  75.             ");
  76.         }
  77.     }
  78.     public function down(Schema $schema): void
  79.     {
  80.         // 必要に応じてロールバック処理を記述
  81.     }
  82. }