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

Sequelize无法获取软删除记录求助:需查询活跃及软删学生地址

嘿,我来帮你搞定这个Sequelize查询软删除地址的问题!

解决Sequelize查询包含软删除地址的问题

你要查询活跃状态的学生,同时关联出他们的所有地址(包括已软删除的),核心问题在于Sequelize的paranoid软删除模式默认会过滤掉deletedAt不为null的记录,咱们只需要在查询配置里手动开启包含软删除数据的选项就行。

核心查询代码

假设你的Students和Addresses模型是一对多关联(比如一个学生对应多个地址),下面是直接可用的查询示例:

// 导入你的模型(根据项目结构调整路径)
const { Students, Addresses } = require('./models');

async function getActiveStudentsWithAllAddresses() {
  return await Students.findAll({
    // 过滤出活跃状态的学生,这里替换成你实际的活跃判断字段(比如isActive: true)
    where: {
      status: 'active'
    },
    // 关联地址表,关键配置在这里
    include: [
      {
        model: Addresses,
        // 开启这个选项,就能包含软删除的地址记录
        paranoid: false,
        // 如果需要对地址额外过滤,可添加where条件,不需要就删掉这行
        // where: { country: 'CN' }
      }
    ]
  });
}

模型配置补全(如果还没开启软删除)

如果你的Addresses模型还没配置软删除,需要先在模型定义里开启paranoid模式:

// Addresses模型示例
export default (sequelize, DataTypes) => {
  const Addresses = sequelize.define('Addresses', {
    street: DataTypes.STRING,
    city: DataTypes.STRING,
    zipCode: DataTypes.STRING
  }, {
    // 开启软删除模式
    paranoid: true,
    // 可选:如果你的软删除字段不是默认的deletedAt,可自定义字段名
    // deletedAt: 'deletedTime'
  });

  // 关联Students模型(外键根据你的实际情况调整)
  Addresses.associate = function(models) {
    Addresses.belongsTo(models.Students, { foreignKey: 'studentId' });
  };

  return Addresses;
};

常见坑点排查

  1. 还是查不到软删除记录? 检查Addresses模型是否真的开启了paranoid: true,并且软删除的记录的deletedAt字段确实有值(不是null)。
  2. 如果是单独查询地址表? 直接在findAll里加paranoid: false即可:
const allAddressesIncludingDeleted = await Addresses.findAll({
  paranoid: false
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:38:08