Model 在Sequelize中使用模型和迁移

Model 在Sequelize中使用模型和迁移,model,sequelize.js,Model,Sequelize.js,假设我正在创建一个用户模型,所以我创建了如下迁移: module.exports = { up: (queryInterface, Sequelize) => { return queryInterface.createTable('Users', { id: { allowNull: false, autoIncrement: true, primaryKey: true, type: Sequeli

假设我正在创建一个用户模型,所以我创建了如下迁移:

module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('Users', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      username: {
        allowNull: false,
        type: Sequelize.STRING,
        unique: true
      },
      phone: {
        allowNull: false,
        type: Sequelize.STRING(15),
        unique: true
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    })
  },

  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('Users')
  }
}
这是我的用户模型:

const Sequelize = require('sequelize')

class User extends Sequelize.Model {

  static init(sequelize, DataTypes) {
    return super.init({
      username: {
        type: DataTypes.STRING,
        allowNull: false,
        unique: true,
        validate: {
          is: /^[a-zA-Z0-9._]+$/,
          notNull: true,
          notEmpty: true
        }
      },
      phone: {
        type: DataTypes.STRING(15),
        allowNull: false,
        unique: true,
        validate: {
          notNull: true,
          notEmpty: true,
          max: 15
        }
      }
    }, { sequelize })
  }
}

module.exports = User
我需要在模型中添加哪些列附加属性?例如,我认为我可以在模型中省略'allowNull'属性,但据我所知,如果我有一个列是主键而不是id,我需要将它放在模型中


那么,我应该在模型中放哪一个,不应该放哪一个?

迁移只是对数据库模式进行版本设置的一种方法。它可能包含与您的业务需求无关的定义,例如:如何自动生成ID字段、时间戳列等,但其他所有内容都应该在模型中

在您的示例中,我认为Sequelize不允许您省略allowNull,因为您有一个禁止空值的验证。此外,如果您曾经在模型中调用过sync,那么将在没有此约束的情况下创建表

关于键,除非数据库知道如何生成此列的值,否则它也应该在模型中