Sequelize 是一个流行的 Node.js ORM(对象关系映射)库,用于与数据库进行交互。当你使用 Sequelize 的 save()
方法时,它应该保存你对模型实例所做的更改。如果你发现 save()
方法没有保存你推送到 JSON 中的更改,而是保存了其他所有内容,可能有以下几个原因:
如果你直接修改了模型实例的 JSON 属性,Sequelize 可能不会自动检测到这些更改。你需要手动标记实例为已更改。
解决方法:
const instance = await MyModel.findByPk(1);
instance.someField = 'new value';
instance.changed('someField', true); // 手动标记字段为已更改
await instance.save();
set
方法使用 set
方法可以确保 Sequelize 正确跟踪更改。
解决方法:
const instance = await MyModel.findByPk(1);
instance.set('someField', 'new value');
await instance.save();
如果你有一组更改,可以使用 set
方法进行批量赋值。
解决方法:
const instance = await MyModel.findByPk(1);
instance.set({
someField: 'new value',
anotherField: 'another new value'
});
await instance.save();
如果你在一个事务中进行操作,确保事务已正确提交。
解决方法:
const transaction = await sequelize.transaction();
try {
const instance = await MyModel.findByPk(1, { transaction });
instance.someField = 'new value';
await instance.save({ transaction });
await transaction.commit();
} catch (error) {
await transaction.rollback();
throw error;
}
确保你的模型定义正确,没有禁用自动保存更改的选项。
解决方法:
const MyModel = sequelize.define('MyModel', {
someField: DataTypes.STRING,
// 其他字段定义
}, {
// 确保没有禁用自动保存更改的选项
});
以下是一个完整的示例,展示了如何正确使用 save()
方法:
const { Sequelize, DataTypes, Model } = require('sequelize');
const sequelize = new Sequelize('sqlite::memory:'); // 示例使用 SQLite 内存数据库
class MyModel extends Model {}
MyModel.init({
someField: DataTypes.STRING,
}, { sequelize, modelName: 'myModel' });
(async () => {
await sequelize.sync({ force: true });
const instance = await MyModel.create({ someField: 'initial value' });
console.log('Initial value:', instance.someField);
instance.someField = 'new value';
await instance.save();
console.log('Updated value:', instance.someField);
})();
通过以上方法,你应该能够解决 save()
方法未保存 JSON 更改的问题。如果问题仍然存在,请检查是否有其他中间件或逻辑干扰了保存过程。
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云