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

如何在Sequelize中全局设置所有查询的paranoid: false?

如何在Sequelize中全局设置paranoid: false

嘿,我来帮你搞定这个Sequelize全局设置paranoid: false的问题!你之前尝试在query配置项里加这个参数,其实找错地方啦——Sequelize的query配置主要管查询的基础行为(比如超时、是否返回原始数据),并不负责全局控制软删除的过滤逻辑。下面给你两种最常用的全局配置方案,对应不同的场景:

场景1:全局禁用所有模型的软删除功能

如果你的需求是所有模型默认都不启用软删除,那直接在Sequelize实例初始化时,通过define选项设置全局模型默认配置就可以了。这样所有后续定义的模型都会自动继承这个设置,不需要每个模型单独写paranoid: false:

this._sequelize = new Sequelize({
  dialect: "mysql",
  host: ENV_MYSQL_HOSTNAME,
  database: ENV_MYSQL_DB,
  username: ENV_MYSQL_USER,
  password: ENV_MYSQL_PASSWORD,
  define: {
    paranoid: false // 全局默认关闭软删除
  }
});

这样设置后,所有查询都不会自动添加deletedAt IS NULL的过滤条件,直接返回所有数据。

场景2:模型已启用软删除,但全局忽略过滤

如果你的某些模型已经显式设置了paranoid: true(启用了软删除),但你希望所有查询都强制忽略软删除过滤,可以通过全局查询钩子来实现。在Sequelize实例初始化后,添加一个beforeFind钩子,自动修改所有查询的选项:

this._sequelize = new Sequelize({
  dialect: "mysql",
  host: ENV_MYSQL_HOSTNAME,
  database: ENV_MYSQL_DB,
  username: ENV_MYSQL_USER,
  password: ENV_MYSQL_PASSWORD
});

// 全局钩子:所有find类操作(findAll/findOne/findByPk等)执行前强制关闭paranoid过滤
this._sequelize.addHook('beforeFind', (options) => {
  options.paranoid = false;
});

这个钩子会在每一次查询执行前生效,不管你有没有在查询里显式设置paranoid,都会被强制改成false,确保返回所有记录(包括已软删除的)。

补充说明

  • 如果同时使用两种方案,define里的全局模型配置优先级更高——因为模型本身就没启用软删除,钩子也就没必要触发了。
  • 如果你只是偶尔需要临时覆盖全局设置,还是可以在单个查询里显式加{ paranoid: true }(如果需要过滤已删除数据),这个局部设置会覆盖全局配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:03:38