<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
final class Version2024121300000000 extends AbstractMigration
{
public function getDescription(): string
{
return 'Import maker data from CSV';
}
private function loadCsvData(): array
{
// CSVファイルのパスを指定(src/Migrations/Data/makers.csvなど)
$csvPath = __DIR__ . '/Data/makers.csv';
if (!file_exists($csvPath)) {
throw new \RuntimeException('CSV file not found: ' . $csvPath);
}
$data = [];
if (($handle = fopen($csvPath, 'r')) !== false) {
// ヘッダー行をスキップ
fgetcsv($handle);
while (($row = fgetcsv($handle)) !== false) {
// CSVの列順序に合わせて配列にマッピング
$data[] = [
'id' => $row[0],
'name_en' => $row[1],
'name_jp' => $row[2],
];
}
fclose($handle);
}
return $data;
}
public function up(Schema $schema): void
{
try {
$makers = $this->loadCsvData();
foreach ($makers as $maker) {
$this->addSql(
'INSERT INTO dtb_maker (id, name_en, name_jp, create_date, update_date, discriminator_type)
VALUES (?, ?, ?, NOW(), NOW(), \'maker\')',
[$maker['id'], $maker['name_en'], $maker['name_jp']]
);
}
} catch (\Exception $e) {
$this->write('Migration failed: ' . $e->getMessage());
throw $e;
}
}
public function down(Schema $schema): void
{
// 追加したすべてのメーカーデータを削除
$this->addSql('DELETE FROM dtb_maker WHERE id IN (SELECT id FROM dtb_maker)');
}
}