当我在表格中添加新列时,不会更新Sequelize

时间:2016-03-21 03:57:27

标签: node.js postgresql express sequelize.js

当我在表格中添加新列时,我无法说服为什么我的续集模型没有更新。

我在我的表中添加了新列'status INTEGER',并在sequelize中的表格模型中更新如下。当我从表中检索值时,它什么都没有。

enter image description here

            },
            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()
    }
};

2 个答案:

答案 0 :(得分:0)

您需要重新同步表格才能使更改生效,请尝试sequalize.sync({force:true}) 希望它有所帮助:)

答案 1 :(得分:0)

<块引用>

当我从我的表中检索值时,它什么也没有。

同样的事情发生在我身上。我创建了一个向表中添加一列的迁移。当我使用 .findAll.findOnefindAllAndCount 等时,该列不会出现。

您可以通过两种方式获取新列:

  • 将新列添加到模型定义中。这不仅需要通过 .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})