2.0 KiB
2.0 KiB
[API] 절곡품 resolve-item 500 에러 수정 (specification 컬럼)
날짜: 2026-03-18 작성자: Claude Code 대상: sam-api (PHP Laravel) 심각도: High 영향 범위: 절곡품 재고생산 등록 > 품목 매핑 조회
1. 증상
절곡품 재고생산 등록 화면에서 품목명 + 종류 + 모양&길이 3개 드롭다운 선택 시 500 Internal Server Error 발생.
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'specification' in 'field list'
SQL: select `id`, `code`, `name`, `specification`, `unit` from `items` where ...
2. 원인
BendingCodeService::resolveItem() 메서드에서 Eloquent eager loading에 specification을 DB 컬럼으로 직접 지정하고 있었으나, items 테이블에는 specification 컬럼이 존재하지 않음.
specification은 Item 모델의 accessor ($appends)로, attributes JSON 컬럼에서 spec 또는 specification 값을 추출하는 가상 속성.
// Item 모델
protected $appends = ['specification'];
public function getSpecificationAttribute(): ?string
{
$attrs = $this->attributes['attributes'] ?? null;
// ...
return $attrs['spec'] ?? $attrs['specification'] ?? null;
}
3. 수정 내용
파일: app/Services/BendingCodeService.php:139
// 변경 전 (500 에러)
->with('item:id,code,name,specification,unit')
// 변경 후 (정상)
->with('item:id,code,name,attributes,unit')
specification 대신 실제 DB 컬럼 attributes를 select하면, accessor가 자동으로 specification 값을 계산하여 반환함.
4. 검증
- 매핑된 조합 선택 시: 200 응답 +
item_code,item_name,specification,expected_code정상 반환 - 매핑 안 된 조합 선택 시: 404 응답 +
expected_code정상 반환 (500 에러 해소)
5. 관련 변경
| 항목 | 설명 |
|---|---|
| 동일 커밋 | expected_code 필드 추가 (BendingController.php) |
| 프론트엔드 | BendingLotForm.tsx에서 expected_code 표시 로직 적용 완료 |