在nodejs(sequelize)中,通过迁移在MySql中添加新的键或列,但它没有在模型中定义,那么它如何在模型中自动更新
我在添加新列时进行了新迁移,并且该列已成功添加,并且它也显示在数据库中。但是,在执行添加等任何操作时,它不会在该特定列中添加,因为该特定列不在模态中。
因此,在自动迁移时,模式应该更新。目前我必须手动将该键放入模态中
在 Sequelize 中,模型定义和数据库模式是不同的问题。当您创建迁移以向数据库添加新列时,迁移会更新架构,但模型定义保持不变。
为了确保在数据库中添加新列时模型自动更新,您可以使用
define
对象的 DataTypes
方法将新列动态添加到模型中。
以下是如何执行此操作的示例:
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('your_table_name', 'new_column', {
type: Sequelize.STRING,
allowNull: false,
defaultValue: 'default_value',
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('your_table_name', 'new_column');
},
};
define
方法将新列动态添加到模型中:const { Model, DataTypes } = require('sequelize');
const sequelize = require('./sequelize-instance');
class YourModel extends Model {}
YourModel.init(
{
// Existing model definition
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
},
// ...
},
{
sequelize,
modelName: 'YourModel',
tableName: 'your_table_name',
timestamps: true,
}
);
// Dynamically add the new column to the model
YourModel.init(
{
newColumn: {
type: DataTypes.STRING,
allowNull: false,
defaultValue: 'default_value',
},
},
{
sequelize,
modelName: 'YourModel',
tableName: 'your_table_name',
timestamps: true,
}
);
module.exports = YourModel;
在上面的示例中,我们为新列使用
DataTypes.STRING
类型,将其设置为 allowNull: false
,并提供 defaultValue
。您可以根据您的要求调整这些选项。
通过使用此方法,应用迁移时新列将自动添加到模型中,您可以在应用程序中使用新列,而无需手动更新模型。
请记住,如果数据库中有现有数据,则默认值将应用于所有现有行的新列。如果您需要以不同的方式处理此问题,您可能需要编写额外的迁移逻辑以使用适当的值填充新列。