app/DoctrineMigrations/Version20241213000000.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. final class Version2024121300000000 extends AbstractMigration
  7. {
  8.     public function getDescription(): string
  9.     {
  10.         return 'Import maker data from CSV';
  11.     }
  12.     private function loadCsvData(): array
  13.     {
  14.         // CSVファイルのパスを指定(src/Migrations/Data/makers.csvなど)
  15.         $csvPath __DIR__ '/Data/makers.csv';
  16.         
  17.         if (!file_exists($csvPath)) {
  18.             throw new \RuntimeException('CSV file not found: ' $csvPath);
  19.         }
  20.         $data = [];
  21.         if (($handle fopen($csvPath'r')) !== false) {
  22.             // ヘッダー行をスキップ
  23.             fgetcsv($handle);
  24.             
  25.             while (($row fgetcsv($handle)) !== false) {
  26.                 // CSVの列順序に合わせて配列にマッピング
  27.                 $data[] = [
  28.                     'id' => $row[0],
  29.                     'name_en' => $row[1],
  30.                     'name_jp' => $row[2],
  31.                 ];
  32.             }
  33.             fclose($handle);
  34.         }
  35.         
  36.         return $data;
  37.     }
  38.     public function up(Schema $schema): void
  39.     {
  40.         try {
  41.             $makers $this->loadCsvData();
  42.             
  43.             foreach ($makers as $maker) {
  44.                 $this->addSql(
  45.                     'INSERT INTO dtb_maker (id, name_en, name_jp, create_date, update_date, discriminator_type) 
  46.                     VALUES (?, ?, ?, NOW(), NOW(), \'maker\')',
  47.                     [$maker['id'], $maker['name_en'], $maker['name_jp']]
  48.                 );
  49.             }
  50.         } catch (\Exception $e) {
  51.             $this->write('Migration failed: ' $e->getMessage());
  52.             throw $e;
  53.         }
  54.     }
  55.     public function down(Schema $schema): void
  56.     {
  57.         // 追加したすべてのメーカーデータを削除
  58.         $this->addSql('DELETE FROM dtb_maker WHERE id IN (SELECT id FROM dtb_maker)');
  59.     }
  60. }