首页 > 解决方案 > Sequelize 迁移不会从模型中迁移多个字段

问题描述

我正在尝试将新表迁移到 Sequelize 在 PostgreSQL 9.4 上构建数据库。迁移后,该表不显示多个字段(第一个),我也无法使用我的 API 请求它。

我尝试使用 ES5 和 ES6 编写模型,撤消所有迁移并重新迁移,尝试使用不同的表手动编写模型

这是我的 index.js 用于 sequelize :

[...]
let sequelize;
if (config.use_env_variable) {
  sequelize = new Sequelize(process.env[config.use_env_variable]);
} else {
  sequelize = new Sequelize(
    config.database, config.username, config.password, config
  );
}

fs
  .readdirSync(__dirname)
  .filter((file) =>
    (file.indexOf('.') !== 0) &&
    (file !== basename) &&
    (file.slice(-3) === '.js'))
  .forEach((file) => {
    const model = sequelize.import(path.join(__dirname, file));
    db[model.name] = model;
  });

Object.keys(db).forEach((modelName) => {
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;

这是我的表的模型文件(名为电影)

'use strict';
module.exports = (sequelize, DataTypes) => {
  const Movies = sequelize.define('Movies', {
    title: DataTypes.STRING,
    year: DataTypes.INTEGER,
    runtime: DataTypes.STRING,
    genre: DataTypes.STRING,
    plot: DataTypes.STRING,
    documentary: DataTypes.BOOLEAN,
    votes: DataTypes.INTEGER
  }, {});
  Movies.associate = function(models) {
    // associations can be defined here
  };
  return Movies;
};

这是迁移文件:

'use strict';
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('Movies', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      title: {
        type: Sequelize.STRING
      },
      year: {
        type: Sequelize.NUMBER
      },
      runtime: {
        type: Sequelize.STRING
      },
      genre: {
        type: Sequelize.STRING
      },
      plot: {
        type: Sequelize.STRING
      },
      documentary: {
        type: Sequelize.BOOLEAN
      },
      votes: {
        type: Sequelize.NUMBER
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('Movies');
  }
};

我希望有更多的字段而不仅仅是标题字段,但它总是创建只有“id、title、createdAt、updateAt”字段的电影。

标签: javascriptnode.jspostgresqlsequelize.js

解决方案


推荐阅读