You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现删除公司时自动删除关联分支的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 01:49:54