返回

API 查询中使用 `service_code` 还是 `id`? - 避免 404 错误

mysql

在 API 查询中使用 service_code 还是 id

在开发多对多关系的 API 时,选择正确的查询参数至关重要。本文将深入探讨在查询服务时使用 service_codeid 之间的区别,并指导你解决相关的错误。

背景

当你使用多对多关系时,连接表通常会包含两个主键字段,对应于两个参与表的 id。在我们的示例中,SaleService 表连接 SaleService 表,其中 sale_idservice_id 字段担任主键。

问题:使用 service_code 查询服务

在创建销售并传递服务列表时,使用 service_code 而非 id 查询服务会导致错误。这通常是因为 Service 表中不存在 service_code 字段。

解决方案:使用 id 查询服务

为了解决这个问题,你需要在查询服务时使用 id 而不是 service_code。以下步骤将指导你完成此过程:

  1. 检查请求体: 确保你传递的是服务的 id,而不是 service_code
  2. 更新查询方法: 在你的查询方法中,使用 findByPk 方法来查找服务,如下所示:
const service = await Service.findByPk(id);
  1. 处理未找到的服务: 如果服务不存在,请使用 NotFoundError 异常进行处理,如下所示:
if (!service) {
  return next(new ErrorResponse(`Service with id: ${id} not found`, 404));
}
  1. 创建 SaleService 在获取服务后,使用其 id 创建 SaleService,如下所示:
const saleService = await SaleService.create({ 
    sale_id: sale.id, 
    service_id: service.id, 
});

结论

通过遵循这些步骤,你可以使用 id 正确查询服务,并避免在创建销售时出现错误。请注意,确保传递正确的 id 并在未找到服务时进行适当处理非常重要。

常见问题解答

  • 为什么不能使用 service_code 查询服务?
    service_code 不是 Service 表的主键,因此不能用于查询。
  • 如果我传递的是 service_code,会发生什么?
    如果你传递的是 service_code,你将收到一个错误,表明服务不存在。
  • 如何获取服务的 id
    你可以通过在 Service 表中查询 service_code 来获取服务的 id
  • 如何处理未找到的服务?
    如果你未找到服务,你可以使用 NotFoundError 异常进行处理。
  • 创建 SaleService 时,为什么需要传递 sale_idservice_id
    sale_idservice_idSaleService 表的主键,因此在创建 SaleService 时需要传递。