当我在表格中添加新列时,我无法说服为什么我的续集模型没有更新。
我在我的表中添加了新列'status INTEGER',并在sequelize中的表格模型中更新如下。当我从表中检索值时,它什么都没有。
},
status: {
type: DataTypes.INTEGER,
default: 0
}
请帮我解决这个问题。甚至我也按照以下方式运行迁移。
module.exports = {
up: function (migration, DataTypes, done) {
function addDisabledColumn() {
return migration.addColumn('applications', 'status',
{
type: DataTypes.INTEGER,
default: 0
}
)
}
addDisabledColumn().then(function () {
done();
}, function (err) {
done(err);
});
},
down: function (migration, DataTypes, done) {
done()
}
};
答案 0 :(得分:0)
您需要重新同步表格才能使更改生效,请尝试sequalize.sync({force:true})
希望它有所帮助:)
答案 1 :(得分:0)
当我从我的表中检索值时,它什么也没有。
同样的事情发生在我身上。我创建了一个向表中添加一列的迁移。当我使用 .findAll
、.findOne
、findAllAndCount
等时,该列不会出现。
您可以通过两种方式获取新列:
将新列添加到模型定义中。这不仅需要通过 .find
查询获取新列,而且还可以在调用 .create
时保存该列。如果这不起作用:
使用 attributes
并明确定义要检索的新列:
const employee = await Employee.findOne({
where: { id: id },
attributes: ['id', 'name', 'NEW_COLUMN'],
});
如果要在多个位置查询表,最好为要查询的字段创建别名,并在运行查找查询的任何地方使用它:
const Employee = sequelize.define('employee', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
// DONT FORGET TO ADD THE NEW COLUMN TO YOUR MODEL
NEW_COLUMN: {
type: DataTypes.STRING,
allowNull: true,
}
// ...
});
Employee.basicAttributes = (alias = 'employee') => [
'id',
'name',
'NEW_COLUMN',
// ...
];
const employee = await Employee.findOne({
where: { id: id },
attributes: Employee.basicAttributes(),
});
这并不理想,但它有效,并且不需要运行 sequalize.sync({force:true})
。