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

如何让Sequelize的destroy方法返回被删除行的实例?

解决Sequelize destroy方法无法返回被删除实例的问题

Sequelize的destroy方法默认返回的是被删除的行数,这就是你看到控制台输出1 5 deleteone的原因(数字1代表成功删除1行数据)。要获取被删除行的实例,有两种可行方案:

方案1:先查询实例再删除(兼容所有数据库)

先通过findByPk或其他查询方法获取要删除的实例,再调用实例的destroy方法,这样就能直接拿到被删除的实例对象:

exports.deleteCustomer = asyncHandler(async (req, res) => {
    const id = req.params.id;

    if (!id) {
        res.status(400).send({ message: "can't remove, invalid customer" });
        return;
    }

    try {
        // 先查询目标实例
        const customer = await Customer.findByPk(id);
        if (!customer) {
            res.status(404).send({ message: "Customer not found" });
            return;
        }
        // 调用实例的destroy方法完成删除
        await customer.destroy();
        console.log(customer, id, "deleted customer");
        res.status(200).json(customer);
    } catch (error) {
        res.status(400);
        throw new Error(error.message || "can't remove Customer");
    }
})

方案2:使用destroy的returning选项(仅支持部分数据库)

如果你的项目使用PostgreSQL、SQLite等支持RETURNING语句的数据库,可以直接在destroy配置中添加returning: true,此时方法会返回一个包含[删除行数, 被删除实例数组]的数组:

exports.deleteCustomer = asyncHandler(async (req, res) => {
    const id = req.params.id;

    if (!id) {
        res.status(400).send({ message: "can't remove, invalid customer" });
        return;
    }

    try {
        const [deletedCount, deletedCustomers] = await Customer.destroy({ 
            where: { id: id },
            returning: true // 开启返回被删除实例
        });
        if (deletedCount === 0) {
            res.status(404).send({ message: "Customer not found" });
            return;
        }
        console.log(deletedCustomers[0], id, "deleted customer");
        res.status(200).json(deletedCustomers[0]);
    } catch (error) {
        res.status(400);
        throw new Error(error.message || "can't remove Customer");
    }
})

注意:MySQL不支持returning选项,这种情况下只能使用方案1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 01:08:16