app/DoctrineMigrations/Version20251223000000.php line 1

Open in your IDE?
  1. <?php
    
    declare(strict_types=1);
    
    namespace DoctrineMigrations;
    
    use Doctrine\DBAL\Schema\Schema;
    use Doctrine\Migrations\AbstractMigration;
    
    /**
     * dtb_csvにフィールドを追加するマイグレーション
     * - 予約CSV(csv_type_id=6)に性別項目を追加
     * - 会員CSV(csv_type_id=2)にフリー項目1、フリー項目2を追加
     */
    final class Version20251223000000 extends AbstractMigration
    {
        const NAME = 'dtb_csv';
    
        public function getDescription(): string
        {
            return '予約CSVに性別項目を追加、会員CSVにフリー項目1・2を追加';
        }
    
        public function up(Schema $schema): void
        {
            if (!$schema->hasTable(self::NAME)) {
                return;
            }
    
            // 予約CSV(csv_type_id=6)に性別項目を追加
            $reserveSexExists = $this->connection->fetchOne(
                "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 = '性別'",
                ['Customize\\Entity\\Reserve']
            );
            
            if ($reserveSexExists == 0) {
                // 予約CSVの現在の最大sort_noを取得
                $maxSortNo = $this->connection->fetchOne(
                    "SELECT MAX(sort_no) FROM dtb_csv WHERE csv_type_id = 6"
                );
                $nextSortNo = ($maxSortNo !== null && $maxSortNo !== false) ? $maxSortNo + 1 : 1;
                
                $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]);
            }
    
            // 会員CSV(csv_type_id=2)にフリー項目1を追加
            $customerFree1Exists = $this->connection->fetchOne(
                "SELECT COUNT(*) FROM dtb_csv WHERE csv_type_id = 2 AND entity_name = ? AND field_name = 'free1' AND disp_name = 'フリー項目1'",
                ['Eccube\\Entity\\Customer']
            );
            
            if ($customerFree1Exists == 0) {
                // 会員CSVの現在の最大sort_noを取得
                $maxSortNo = $this->connection->fetchOne(
                    "SELECT MAX(sort_no) FROM dtb_csv WHERE csv_type_id = 2"
                );
                $nextSortNo = ($maxSortNo !== null && $maxSortNo !== false) ? $maxSortNo + 1 : 1;
                
                $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]);
            }
    
            // 会員CSV(csv_type_id=2)にフリー項目2を追加
            $customerFree2Exists = $this->connection->fetchOne(
                "SELECT COUNT(*) FROM dtb_csv WHERE csv_type_id = 2 AND entity_name = ? AND field_name = 'free2' AND disp_name = 'フリー項目2'",
                ['Eccube\\Entity\\Customer']
            );
            
            if ($customerFree2Exists == 0) {
                // 会員CSVの現在の最大sort_noを取得(再度取得して最新の値を使用)
                $maxSortNo = $this->connection->fetchOne(
                    "SELECT MAX(sort_no) FROM dtb_csv WHERE csv_type_id = 2"
                );
                $nextSortNo = ($maxSortNo !== null && $maxSortNo !== false) ? $maxSortNo + 1 : 1;
                
                $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]);
            }
        }
    
        public function down(Schema $schema): void
        {
            // 追加したCSVフィールドを削除
            $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 = '性別'");
            $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'");
            $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'");
        }
    }