即使 paranoid 设置为 true,Sequelize.js 仍会删除表行
Posted
技术标签:
【中文标题】即使 paranoid 设置为 true,Sequelize.js 仍会删除表行【英文标题】:Sequelize.js still deletes table row even if paranoid is set to true 【发布时间】:2017-09-15 02:47:05 【问题描述】:我无法让 Sequelize.js 软删除表中的行。我使用 Sequelize cli 进行所有迁移,并且我没有使用同步功能在启动时重新同步数据库。我的迁移和模型中有时间戳字段,甚至是 deletedAt 字段(模型也有偏执:true),无论如何它仍然删除行而不是向 deletedAt 字段添加时间戳。我注意到当进行任何查询时,它不会像我在一些教程中看到的那样在查询中添加 deletedAt = NULL。我正在使用 Sequelize.js v3.29.0。
模型文件:
'use strict';
module.exports = function(sequelize, DataTypes)
var Collection = sequelize.define('Collection',
userId:
type: DataTypes.INTEGER,
allowNull: false,
validate:
isInt: true
,
name:
type: DataTypes.STRING,
allowNull: false
,
description: DataTypes.TEXT,
createdAt:
allowNull: false,
type: DataTypes.DATE
,
updatedAt:
allowNull: false,
type: DataTypes.DATE
,
deletedAt:
type: DataTypes.DATE
,
classMethods:
associate: function(models)
Collection.belongsTo(models.User, foreignKey: 'userId' )
,
timestamps: true,
paranoid: true
);
return Collection;
;
迁移文件:
'use strict';
module.exports =
up: function(queryInterface, Sequelize)
return queryInterface.createTable('Collections',
id:
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
,
userId:
allowNull: false,
type: Sequelize.INTEGER
,
name:
allowNull: false,
type: Sequelize.STRING
,
description:
type: Sequelize.TEXT
,
createdAt:
allowNull: false,
type: Sequelize.DATE
,
updatedAt:
allowNull: false,
type: Sequelize.DATE
,
deletedAt:
type: Sequelize.DATE
);
,
down: function(queryInterface, Sequelize)
return queryInterface.dropTable('Collections');
;
这是我用来销毁集合对象的控制器中的代码。
Collection.findOne(
where:
id: collectionId,
userId: user.id
).then(function(collection)
if (collection !== null)
collection.destroy().then(function()
res.redirect('/collection');
).catch(function(error)
res.redirect('/collection/'+collectionId);
);
);
【问题讨论】:
【参考方案1】:确保 paranoid 是在第二个对象参数中定义的属性。
...,
classMethods:
associate: function(models)
Collection.belongsTo(models.User, foreignKey: 'userId' )
,
timestamps: true,
paranoid: true
您已将 paranoid 定义为 3. Param,这就是问题所在。
【讨论】:
非常感谢。我没有意识到类级别选项与模型定义的第二级中的 classMethods 和 instanceMethods 进入相同的位置。以上是关于即使 paranoid 设置为 true,Sequelize.js 仍会删除表行的主要内容,如果未能解决你的问题,请参考以下文章
为啥即使我已将 withCredentials 设置为 true,Angular 也不通过 POST 请求发送 cookie?
即使规则设置为 true,也可以用 firebase 反应 CORS 问题
当达到测试超时时,Maven 肯定会失败构建,即使失败时设置为 true
带有 setWordWrap(True) 的 QLabel 在放置在 QListWidget 中时不会垂直调整大小,即使 resizeMode 已设置为 Adjust
即使在 project.json 中将 allowunsafe 标志设置为 true 后,.NET Core 中的不安全代码编译错误