app/DoctrineMigrations/Version20251223000000.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.  * dtb_csvにフィールドを追加するマイグレーション
  8.  * - 予約CSV(csv_type_id=6)に性別項目を追加
  9.  * - 会員CSV(csv_type_id=2)にフリー項目1、フリー項目2を追加
  10.  */
  11. final class Version20251223000000 extends AbstractMigration
  12. {
  13.     const NAME 'dtb_csv';
  14.     public function getDescription(): string
  15.     {
  16.         return '予約CSVに性別項目を追加、会員CSVにフリー項目1・2を追加';
  17.     }
  18.     public function up(Schema $schema): void
  19.     {
  20.         if (!$schema->hasTable(self::NAME)) {
  21.             return;
  22.         }
  23.         // 予約CSV(csv_type_id=6)に性別項目を追加
  24.         $reserveSexExists $this->connection->fetchOne(
  25.             "SELECT COUNT(*) FROM dtb_csv WHERE csv_type_id = 6 AND entity_name = ? AND field_name = 'Customer' AND reference_field_name = 'Sex' AND disp_name = '性別'",
  26.             ['Customize\\Entity\\Reserve']
  27.         );
  28.         
  29.         if ($reserveSexExists == 0) {
  30.             // 予約CSVの現在の最大sort_noを取得
  31.             $maxSortNo $this->connection->fetchOne(
  32.                 "SELECT MAX(sort_no) FROM dtb_csv WHERE csv_type_id = 6"
  33.             );
  34.             $nextSortNo = ($maxSortNo !== null && $maxSortNo !== false) ? $maxSortNo 1;
  35.             
  36.             $this->addSql("INSERT INTO dtb_csv (csv_type_id, creator_id, entity_name, field_name, reference_field_name, disp_name, sort_no, enabled, create_date, update_date, discriminator_type) VALUES (6, 1, 'Customize\\\\Entity\\\\Reserve', 'Customer', 'Sex', '性別', ?, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'csv')", [$nextSortNo]);
  37.         }
  38.         // 会員CSV(csv_type_id=2)にフリー項目1を追加
  39.         $customerFree1Exists $this->connection->fetchOne(
  40.             "SELECT COUNT(*) FROM dtb_csv WHERE csv_type_id = 2 AND entity_name = ? AND field_name = 'free1' AND disp_name = 'フリー項目1'",
  41.             ['Eccube\\Entity\\Customer']
  42.         );
  43.         
  44.         if ($customerFree1Exists == 0) {
  45.             // 会員CSVの現在の最大sort_noを取得
  46.             $maxSortNo $this->connection->fetchOne(
  47.                 "SELECT MAX(sort_no) FROM dtb_csv WHERE csv_type_id = 2"
  48.             );
  49.             $nextSortNo = ($maxSortNo !== null && $maxSortNo !== false) ? $maxSortNo 1;
  50.             
  51.             $this->addSql("INSERT INTO dtb_csv (csv_type_id, creator_id, entity_name, field_name, disp_name, sort_no, enabled, create_date, update_date, discriminator_type) VALUES (2, 1, 'Eccube\\\\Entity\\\\Customer', 'free1', 'フリー項目1', ?, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'csv')", [$nextSortNo]);
  52.         }
  53.         // 会員CSV(csv_type_id=2)にフリー項目2を追加
  54.         $customerFree2Exists $this->connection->fetchOne(
  55.             "SELECT COUNT(*) FROM dtb_csv WHERE csv_type_id = 2 AND entity_name = ? AND field_name = 'free2' AND disp_name = 'フリー項目2'",
  56.             ['Eccube\\Entity\\Customer']
  57.         );
  58.         
  59.         if ($customerFree2Exists == 0) {
  60.             // 会員CSVの現在の最大sort_noを取得(再度取得して最新の値を使用)
  61.             $maxSortNo $this->connection->fetchOne(
  62.                 "SELECT MAX(sort_no) FROM dtb_csv WHERE csv_type_id = 2"
  63.             );
  64.             $nextSortNo = ($maxSortNo !== null && $maxSortNo !== false) ? $maxSortNo 1;
  65.             
  66.             $this->addSql("INSERT INTO dtb_csv (csv_type_id, creator_id, entity_name, field_name, disp_name, sort_no, enabled, create_date, update_date, discriminator_type) VALUES (2, 1, 'Eccube\\\\Entity\\\\Customer', 'free2', 'フリー項目2', ?, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'csv')", [$nextSortNo]);
  67.         }
  68.     }
  69.     public function down(Schema $schema): void
  70.     {
  71.         // 追加したCSVフィールドを削除
  72.         $this->addSql("DELETE FROM dtb_csv WHERE csv_type_id = 6 AND entity_name = 'Customize\\\\Entity\\\\Reserve' AND field_name = 'Customer' AND reference_field_name = 'Sex' AND disp_name = '性別'");
  73.         $this->addSql("DELETE FROM dtb_csv WHERE csv_type_id = 2 AND entity_name = 'Eccube\\\\Entity\\\\Customer' AND field_name = 'free1' AND disp_name = 'フリー項目1'");
  74.         $this->addSql("DELETE FROM dtb_csv WHERE csv_type_id = 2 AND entity_name = 'Eccube\\\\Entity\\\\Customer' AND field_name = 'free2' AND disp_name = 'フリー項目2'");
  75.     }
  76. }