实施 SequelizeJS 软删除的问题
Issues with implementing SequelizeJS soft deletion
我正在尝试在 SequelizeJS 中实现 'soft deletion'。因此,我将 'paranoid: true' 放入模型中,将 'deletedAt' 列放入迁移中。我尝试使用另一个问题中的 ,但由于版本不同,它没有用。另外,我不确定我是否正确编写了控制器。网上没有那么多信息,所以我不确定如何检查我是否做对了。我正在使用 Sequelize 5.3.0。
这是我的模型:
'use strict';
module.exports = (sequelize, DataTypes) => {
const Properties = sequelize.define('Properties', {
name: {
allowNull: false,
type: DataTypes.STRING
}
}, {
timestamps: true,
paranoid: true
});
Properties.associate = function(models) {
// associations can be defined here
Properties.hasMany(models.Deals, {
foreignKey: 'id',
onDelete: 'CASCADE'
})
};
return Properties;
};
这是我的迁移:
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Properties', {
id: {
allowNull: false,
primaryKey: true,
type: Sequelize.INTEGER,
autoIncrement: true
},
name: {
allowNull: false,
type: Sequelize.STRING
}
deletedAt: {
type: Sequelize.DATE
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Properties');
}
};
我从官方文档中找到了 this 解决方案,但对我来说没有意义:
User.findAll({
include: [{
model: Tool,
where: { name: { [Op.like]: '%ooth%' } },
paranoid: false // query and loads the soft deleted records
}]
});
我的 getAllProperties 控制器:
getAllProperties: (req, res, next) => {
return Properties
.all()
.then(properties => res.status(200).json({ status: 'Retrieved all properties', properties }))
.catch(error => console.log(error));
}
我的 destroyProperty 控制器:
destroyProperty: (req, res, next) => {
const { id } = req.params;
return Properties
.findById(id)
.then(property => {
if (!property) {
return res.status(404).send({ message: 'Property not found' })
}
return property
.destroy()
.then(() => res.status(200).json({ status: 'Deleted one property', property }))
.catch(error => console.log(error));
})
}
我想通了,我的模型和迁移都很好,问题是我在做 sequelize db:migrate:undo:all
和 sequelize db:migrate
,但数据库模式保持不变。所以,我做了 sequelize db:drop
和 sequelize db:create
然后它开始创建这个字段。
另外,我更改了 getAllProperties 控制器:
getAllProperties: (req, res, next) => {
return Properties
.findAll({paranoid: false})
.then(properties => res.status(200).json({ status: 'Retrieved all properties', properties }))
.catch(error => console.log(error));
}
在我改变了所有这些之后,它开始工作了。
我正在尝试在 SequelizeJS 中实现 'soft deletion'。因此,我将 'paranoid: true' 放入模型中,将 'deletedAt' 列放入迁移中。我尝试使用另一个问题中的
'use strict';
module.exports = (sequelize, DataTypes) => {
const Properties = sequelize.define('Properties', {
name: {
allowNull: false,
type: DataTypes.STRING
}
}, {
timestamps: true,
paranoid: true
});
Properties.associate = function(models) {
// associations can be defined here
Properties.hasMany(models.Deals, {
foreignKey: 'id',
onDelete: 'CASCADE'
})
};
return Properties;
};
这是我的迁移:
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Properties', {
id: {
allowNull: false,
primaryKey: true,
type: Sequelize.INTEGER,
autoIncrement: true
},
name: {
allowNull: false,
type: Sequelize.STRING
}
deletedAt: {
type: Sequelize.DATE
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Properties');
}
};
我从官方文档中找到了 this 解决方案,但对我来说没有意义:
User.findAll({
include: [{
model: Tool,
where: { name: { [Op.like]: '%ooth%' } },
paranoid: false // query and loads the soft deleted records
}]
});
我的 getAllProperties 控制器:
getAllProperties: (req, res, next) => {
return Properties
.all()
.then(properties => res.status(200).json({ status: 'Retrieved all properties', properties }))
.catch(error => console.log(error));
}
我的 destroyProperty 控制器:
destroyProperty: (req, res, next) => {
const { id } = req.params;
return Properties
.findById(id)
.then(property => {
if (!property) {
return res.status(404).send({ message: 'Property not found' })
}
return property
.destroy()
.then(() => res.status(200).json({ status: 'Deleted one property', property }))
.catch(error => console.log(error));
})
}
我想通了,我的模型和迁移都很好,问题是我在做 sequelize db:migrate:undo:all
和 sequelize db:migrate
,但数据库模式保持不变。所以,我做了 sequelize db:drop
和 sequelize db:create
然后它开始创建这个字段。
另外,我更改了 getAllProperties 控制器:
getAllProperties: (req, res, next) => {
return Properties
.findAll({paranoid: false})
.then(properties => res.status(200).json({ status: 'Retrieved all properties', properties }))
.catch(error => console.log(error));
}
在我改变了所有这些之后,它开始工作了。