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

Sequelize+MySQL执行GraphQL删除操作返回被删ID为null问题咨询

问题原因

  • 你使用的ORM(从代码逻辑判断为Sequelize)的destroy方法默认返回值为被删除的记录行数,而非被删除的记录对象,你直接将行数赋值给propertyItem,返回值不符合PropertyItem类型定义,因此所有字段返回null。
  • Schema定义与业务逻辑不匹配:Mutation入参id为[ID!]!数组类型,支持批量删除,但返回结构中propertyItem是单个PropertyItem对象,即便拿到删除记录,结构也不匹配。

解决步骤

步骤1:调整删除操作配置,获取被删除的记录

给destroy方法添加两个参数:

  • returning: true:配置删除后返回被删除的记录
  • individualHooks: true:开启单条记录钩子,确保多条删除时可以返回所有被删记录

步骤2:调整Schema适配批量删除场景

因为入参支持传多个ID批量删除,将返回结构中的单个对象修改为数组,避免结构不匹配报错:

type DeletePropertyItemsRes {
    success: Boolean!
    message: String!
    propertyItems: [PropertyItem] # 修改为数组类型
}

步骤3:修改Resolver返回逻辑

修改后的Resolver代码如下:

async deletePropertyItems(_, { id }, { models }) {
      try {
        const deletedItems = await models.PropertyItem.destroy({
          where: { id: id },
          returning: true,
          individualHooks: true
        });
        if (deletedItems.length > 0) {
          return {
            success: true,
            message: "Property Item(s) Deleted Successfully!",
            propertyItems: deletedItems,
          };
        }
        return {
          success: false,
          message: "未找到匹配的可删除条目",
        };
      } catch (error) {
        throw new Error(error.message);
      }
    },

补充说明

如果你不需要批量删除功能,也可以将Mutation入参修改为单个IDid: ID!,无需修改返回结构,只需要调整删除操作的配置拿到单条被删记录即可。
如果你使用的是其他ORM(如Prisma),只需要对应调整删除方法的配置,让接口返回被删除的记录对象即可。

内容的提问来源于stack exchange,提问作者Alexdev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:15:04