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'));
|
throw new BadRequestHttpException(__('error.not_found'));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 동적 필드를 options에 병합
|
// 동적 필드를 options에 병합 (기존 item의 options 기반)
|
||||||
$dynamicOptions = $this->extractDynamicOptions($data);
|
$dynamicOptions = $this->extractDynamicOptions($data);
|
||||||
if (! empty($dynamicOptions)) {
|
|
||||||
$existingOptions = $data['options'] ?? [];
|
// 기존 options를 배열 형태로 변환 (label → value 맵)
|
||||||
$data['options'] = $this->mergeOptionsWithDynamic($existingOptions, $dynamicOptions);
|
$existingOptionsMap = [];
|
||||||
|
if (is_array($item->options)) {
|
||||||
|
foreach ($item->options as $opt) {
|
||||||
|
if (isset($opt['label'])) {
|
||||||
|
$existingOptionsMap[$opt['label']] = $opt['value'] ?? '';
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// options 정규화
|
// 새 동적 필드와 기존 options 병합
|
||||||
if (isset($data['options'])) {
|
if (! empty($dynamicOptions)) {
|
||||||
$data['options'] = $this->normalizeOptions($data['options']);
|
// 새 동적 필드로 기존 값 덮어쓰기
|
||||||
|
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 변경 시 중복 체크 (동적 테이블)
|
// code 변경 시 중복 체크 (동적 테이블)
|
||||||
|
|||||||
Reference in New Issue
Block a user