$meta) { $old = $snapshot[$field] ?? null; $new = $model->getAttribute($field); // Enum 객체를 값으로 변환 if ($old instanceof \BackedEnum) { $old = $old->value; } if ($new instanceof \BackedEnum) { $new = $new->value; } if ($old !== $new) { $change = [ 'field' => $field, 'label_key' => $meta['label_key'], 'old' => $old, 'new' => $new, 'type' => $meta['type'] ?? 'text', ]; // enum 타입이면 라벨 키 추가 if (($meta['type'] ?? 'text') === 'enum' && isset($meta['enum'])) { $enumClass = $meta['enum']; $change['old_label_key'] = $old !== null ? $enumClass::tryFrom($old)?->labelKey() : null; $change['new_label_key'] = $new !== null ? $enumClass::tryFrom($new)?->labelKey() : null; } $changes[] = $change; } } return ! empty($changes) ? $changes : null; } /** * 모델의 $activityLogFields 메타데이터를 반환합니다. * * @param Model $model 대상 모델 * @return array 필드 메타데이터 배열 */ private static function getActivityLogFields(Model $model): array { if (property_exists($model, 'activityLogFields')) { return $model::$activityLogFields; } return []; } }