Files
sam-docs/changes/20260318_bending_resolve_item_specification_fix.md

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 컬럼이 존재하지 않음.

specificationItem 모델의 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 표시 로직 적용 완료