1
我無法讓Sequelize.js軟刪除表格中的行。我使用Sequelize cli來完成所有我的遷移,並且我沒有使用同步功能在開始時重新同步數據庫。我在遷移和模型中有時間戳字段,甚至是deletedAt字段(模型有偏執:也是),並且不管它還是刪除行而不是將時間戳添加到deletedAt字段。我注意到什麼時候查詢它不會在查詢中添加deletedAt = NULL,就像我在一些教程中看到的那樣。我正在使用Sequelize.js v3.29.0。即使將偏執設置爲true,Sequelize.js仍會刪除表格行
模型文件:
'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);
});
}
});
非常感謝。我沒有意識到類級選項與Model定義的第二級中的classMethods和instanceMethods一樣。 – bach942
碰巧,不客氣。 – djra