컬럼 목록) * * @var array> */ private const INDEXES = [ 'idx_notification_logs_recipient_name' => ['recipient_name'], 'idx_notification_logs_subject' => ['subject'], ]; /** * 마이그레이션 식별자를 반환합니다. * * @return string 마이그레이션 이름 */ public function name(): string { return 'AddNotificationLogSortIndexes'; } /** * 정렬 인덱스를 추가합니다. * * @param UpgradeContext $context 업그레이드 컨텍스트 */ public function run(UpgradeContext $context): void { if (! Schema::hasTable(self::TABLE)) { $context->logger->info('[core:7.0.6] 알림 발송 이력 테이블 부재 — 정렬 인덱스 추가 스킵'); return; } $existing = array_column(Schema::getIndexes(self::TABLE), 'name'); foreach (self::INDEXES as $name => $columns) { if (in_array($name, $existing, true)) { $context->logger->info("[core:7.0.6] 이미 존재하는 인덱스 — 스킵: {$name}"); continue; } $context->logger->info("[core:7.0.6] 정렬 인덱스 추가 시작: {$name} (발송 이력이 많으면 수 분 걸릴 수 있고 그동안 알림 발송 기록 쓰기가 대기합니다)"); Schema::table(self::TABLE, function ($table) use ($columns, $name) { $table->index($columns, $name); }); $context->logger->info("[core:7.0.6] 정렬 인덱스 추가 완료: {$name}"); } } }