From 0fbeabc892a595ee659602318c0d5f42932cbac6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Wed, 4 Feb 2026 21:52:56 +0900 Subject: [PATCH] =?UTF-8?q?fix:=ED=85=8C=EB=84=8C=ED=8A=B8=20=EC=98=81?= =?UTF-8?q?=EA=B5=AC=EC=82=AD=EC=A0=9C=20=EC=8B=9C=20FK=20=EC=B2=B4?= =?UTF-8?q?=ED=81=AC=20=EC=9E=84=EC=8B=9C=20=EB=B9=84=ED=99=9C=EC=84=B1?= =?UTF-8?q?=ED=99=94=EB=A1=9C=20=EC=A0=9C=EC=95=BD=EC=A1=B0=EA=B1=B4=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/TenantService.php | 35 +++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/app/Services/TenantService.php b/app/Services/TenantService.php index c44dbbad..bc9cf88d 100644 --- a/app/Services/TenantService.php +++ b/app/Services/TenantService.php @@ -128,22 +128,31 @@ public function forceDeleteTenant(int $id): bool // 1. 아카이브에 저장 (복원 가능하도록) $this->archiveService->archiveTenantWithRelations($tenant); - // 2. 관련 데이터 삭제 - $tenant->users()->detach(); // user_tenants 관계 삭제 - $tenant->departments()->forceDelete(); // 부서 영구 삭제 - $tenant->menus()->forceDelete(); // 메뉴 영구 삭제 + // 2. FK 체크 비활성화 후 관련 데이터 삭제 + DB::statement('SET FOREIGN_KEY_CHECKS=0'); - // 역할 삭제 전 하위 참조 데이터 정리 - $roleIds = $tenant->roles()->pluck('id'); - if ($roleIds->isNotEmpty()) { - DB::table('user_roles')->whereIn('role_id', $roleIds)->delete(); - DB::table('role_menu_permissions')->whereIn('role_id', $roleIds)->delete(); - DB::table('role_has_permissions')->whereIn('role_id', $roleIds)->delete(); + try { + $tenant->users()->detach(); // user_tenants 관계 삭제 + + // 역할 하위 참조 데이터 정리 + $roleIds = $tenant->roles()->pluck('id'); + if ($roleIds->isNotEmpty()) { + DB::table('user_roles')->whereIn('role_id', $roleIds)->delete(); + DB::table('role_menu_permissions')->whereIn('role_id', $roleIds)->delete(); + DB::table('role_has_permissions')->whereIn('role_id', $roleIds)->delete(); + } + + $tenant->departments()->forceDelete(); + $tenant->menus()->forceDelete(); + $tenant->roles()->forceDelete(); + + // 3. 테넌트 영구 삭제 + $result = $tenant->forceDelete(); + } finally { + DB::statement('SET FOREIGN_KEY_CHECKS=1'); } - $tenant->roles()->forceDelete(); // 역할 영구 삭제 - // 3. 테넌트 영구 삭제 - return $tenant->forceDelete(); + return $result; }); }