fix: ItemService update() 동적 필드 병합 버그 수정
- 기존 item.options 기반으로 동적 필드 병합하도록 수정 - 일부 필드만 변경 시 나머지 필드가 보존됨 - Item-Master 연동 테스트 완료 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -429,16 +429,40 @@ public function update(int $id, array $data): Model
|
||||
throw new BadRequestHttpException(__('error.not_found'));
|
||||
}
|
||||
|
||||
// 동적 필드를 options에 병합
|
||||
// 동적 필드를 options에 병합 (기존 item의 options 기반)
|
||||
$dynamicOptions = $this->extractDynamicOptions($data);
|
||||
if (! empty($dynamicOptions)) {
|
||||
$existingOptions = $data['options'] ?? [];
|
||||
$data['options'] = $this->mergeOptionsWithDynamic($existingOptions, $dynamicOptions);
|
||||
|
||||
// 기존 options를 배열 형태로 변환 (label → value 맵)
|
||||
$existingOptionsMap = [];
|
||||
if (is_array($item->options)) {
|
||||
foreach ($item->options as $opt) {
|
||||
if (isset($opt['label'])) {
|
||||
$existingOptionsMap[$opt['label']] = $opt['value'] ?? '';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// options 정규화
|
||||
if (isset($data['options'])) {
|
||||
$data['options'] = $this->normalizeOptions($data['options']);
|
||||
// 새 동적 필드와 기존 options 병합
|
||||
if (! empty($dynamicOptions)) {
|
||||
// 새 동적 필드로 기존 값 덮어쓰기
|
||||
foreach ($dynamicOptions as $key => $value) {
|
||||
$existingOptionsMap[$key] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
// 명시적으로 전달된 options 처리
|
||||
if (isset($data['options']) && is_array($data['options'])) {
|
||||
// 배열 형태의 options 병합
|
||||
foreach ($data['options'] as $opt) {
|
||||
if (isset($opt['label'])) {
|
||||
$existingOptionsMap[$opt['label']] = $opt['value'] ?? '';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 최종 options 설정 (병합된 맵이 비어있지 않으면)
|
||||
if (! empty($existingOptionsMap)) {
|
||||
$data['options'] = $this->normalizeOptions($existingOptionsMap);
|
||||
}
|
||||
|
||||
// code 변경 시 중복 체크 (동적 테이블)
|
||||
|
||||
Reference in New Issue
Block a user