如何实现删除公司时自动删除关联分支的Delete方法逻辑
解决方案:删除公司时联动删除关联分支
问题背景
需求为调用DELETE接口删除公司时,自动删除该公司关联的所有分支;现有实现无关联分支时会报错,需优化逻辑以保证流程稳定。
给定数据
{ "addCompany": [ { "companyName": "HCL", "industryName": "s/w", "dateFormat": "ddmmyyyy", "dateFieldSeperator": "/", "officePremisisNo": 1005, "street": "Sector 62", "city": "Noida", "state": "Uttar Pradesh", "pincode": "201015", "primaryEmail": "sppd@gmail.com", "secondaryEmail": "spd@gmail.com", "primaryMobileNo": 8876543566, "secondaryMobileNo": 7788765445, "status": "active", "id": 1 } ], "addBranchToCompany": [ { "branchName": "HCL Noida", "city": "City", "state": "State", "status": "Active", "contactPerson": "Miles", "primaryEmail": "miles@gmail.com", "secondaryEmail": "info@HCL.com", "primaryMobile": "8899876566", "secondaryMobile": "8876566567", "companyId": "1", "id": 1 }, { "branchName": "HCL Ghaziabad", "city": "City", "state": "State", "status": "Active", "contactPerson": "Peter", "primaryEmail": "peter@gmail.com", "secondaryEmail": "info@HCL.com", "primaryMobile": "8867675665", "secondaryMobile": "8867565778", "companyId": 1, "id": 2 } ] }
现有实现代码
deleteCompany(id: number) { console.log(id); // this.companies.splice(id-1,1) this.repository.deleteCompany(`addCompany/${id}`).subscribe(() => { console.log('deleted'); this.getCompanies(); }); this.repository.deleteBranch(`addBranchToCompany?companyId=${id}`).subscribe(()=>{ console.log("branch deleted"); }) }
可行解决方案
方案1:前端先查询分支再执行联动删除
通过先获取目标公司的分支列表,按需执行删除后再删除公司,避免无分支时的报错:
deleteCompany(id: number) { // 先获取该公司关联的所有分支 this.repository.getBranchesByCompanyId(id).subscribe({ next: (branches) => { if (branches.length > 0) { // 并行删除所有分支(用forkJoin处理批量请求) const deleteRequests = branches.map(branch => this.repository.deleteBranch(`addBranchToCompany/${branch.id}`) ); forkJoin(deleteRequests).subscribe({ next: () => { console.log('所有分支已删除'); this.deleteTargetCompany(id); }, error: (err) => { console.error('分支删除失败:', err); // 可根据业务需求决定是否继续删除公司 } }); } else { // 无关联分支,直接删除公司 this.deleteTargetCompany(id); } }, error: (err) => { console.error('获取分支列表失败:', err); // 分支查询失败时,可选择直接删除公司或提示用户 this.deleteTargetCompany(id); } }); } // 封装删除公司的逻辑,避免重复代码 private deleteTargetCompany(id: number) { this.repository.deleteCompany(`addCompany/${id}`).subscribe({ next: () => { console.log('公司已删除'); this.getCompanies(); }, error: (err) => { console.error('删除公司失败:', err); } }); }
方案2:后端处理联动删除(推荐)
前端仅调用删除公司的接口,由后端在删除公司时自动清理关联分支,这种方式能保证数据一致性,前端逻辑更简洁:
deleteCompany(id: number) { this.repository.deleteCompany(`addCompany/${id}`).subscribe({ next: () => { console.log('公司及关联分支已删除'); this.getCompanies(); // 若需刷新分支列表,可调用对应的查询接口 }, error: (err) => { console.error('删除失败:', err); } }); }
后端需在删除公司的业务逻辑中,执行DELETE FROM addBranchToCompany WHERE companyId = ?这类操作,或通过数据库外键的ON DELETE CASCADE配置自动清理关联数据。
方案3:优化现有请求,忽略无分支错误
如果不想大幅修改代码,可给删除分支的请求添加错误处理,忽略无分支时的404报错:
deleteCompany(id: number) { this.repository.deleteCompany(`addCompany/${id}`).subscribe({ next: () => { console.log('公司已删除'); this.getCompanies(); }, error: (err) => { console.error('删除公司失败:', err); } }); this.repository.deleteBranch(`addBranchToCompany?companyId=${id}`).subscribe({ next: () => console.log('分支已删除'), error: (err) => { // 仅在非404错误时抛出异常 if (err.status !== 404) { console.error('删除分支失败:', err); } } }); }
内容的提问来源于stack exchange,提问作者CryAndCode
相关产品推荐
相关产品推荐

