From d01253aa27d62757bae181e38de5b80ea292ec33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Tue, 10 Feb 2026 16:57:48 +0900 Subject: [PATCH] =?UTF-8?q?fix:save()=EC=97=90=EC=84=9C=20=EC=88=98?= =?UTF-8?q?=EB=8F=99=20=EA=B1=B0=EB=9E=98=EB=A5=BC=20dbId=EB=A1=9C=20?= =?UTF-8?q?=EC=A7=81=EC=A0=91=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 수동 거래는 balance가 재계산되어 composite key 매칭 불가. dbId를 사용하여 직접 레코드를 찾고 비-키 필드만 업데이트. Co-Authored-By: Claude Opus 4.6 --- .../Barobill/EaccountController.php | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/Barobill/EaccountController.php b/app/Http/Controllers/Barobill/EaccountController.php index a5eab35e..7b6f24be 100644 --- a/app/Http/Controllers/Barobill/EaccountController.php +++ b/app/Http/Controllers/Barobill/EaccountController.php @@ -906,10 +906,22 @@ public function save(Request $request): JsonResponse DB::beginTransaction(); foreach ($transactions as $trans) { - // 수동 입력 거래는 스킵 (updateManual에서 별도 처리) - // 수동 거래의 balance는 화면에서 재계산된 값이므로 save()에서 처리하면 - // 다른 레코드와 unique key 충돌 발생 - if (!empty($trans['isManual'])) { + // 수동 입력 거래: dbId로 직접 찾아서 비-키 필드만 업데이트 + // balance는 화면에서 재계산된 값이므로 composite key 매칭 불가 + if (!empty($trans['isManual']) && !empty($trans['dbId'])) { + DB::table('barobill_bank_transactions') + ->where('id', $trans['dbId']) + ->where('tenant_id', $tenantId) + ->update([ + 'summary' => $trans['summary'] ?? '', + 'cast' => $trans['cast'] ?? '', + 'memo' => $trans['memo'] ?? '', + 'trans_office' => $trans['transOffice'] ?? '', + 'account_code' => $trans['accountCode'] ?? null, + 'account_name' => $trans['accountName'] ?? null, + 'updated_at' => now(), + ]); + $updated++; continue; } @@ -946,7 +958,6 @@ public function save(Request $request): JsonResponse $savedUniqueKeys[] = $uniqueKey; // 순수 Query Builder로 Upsert (Eloquent 모델 우회) - // Eloquent의 decimal cast가 dirty 감지하여 unique 제약조건 위반을 일으키므로 $existingId = DB::table('barobill_bank_transactions') ->where('tenant_id', $tenantId) ->where('bank_account_num', $data['bank_account_num'])