如何在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
相关产品推荐
相关产品推荐

