fix:테넌트 영구삭제 시 FK 체크 임시 비활성화로 제약조건 오류 해결

This commit is contained in:
김보곤
2026-02-04 21:52:56 +09:00
parent 0fd5173e43
commit 0fbeabc892

View File

@@ -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;
});
}