假设我正在创建一个用户模型,所以我创建了这样的迁移:
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
我需要在模型中的哪个列中添加其他属性?例如,我认为我可以在Model中省略'allowNull'属性,但是据我所知,如果我有一个作为主键(而不是id)的列,则需要将其放入模型中。 / p>
那我应该在模型中放哪一个而不是我呢?
答案 0 :(得分:1)
迁移只是对数据库架构进行版本控制的一种方法。它可能包含与您的业务需求无关的定义(例如:如何自动生成ID字段,时间戳列等),但是其他所有内容都应该在模型中。
在您的示例中,我认为Sequelize不允许您省略allowNull
,因为您具有禁止空值的验证。另外,如果您曾在模型中调用过sync()
,则将在没有此约束的情况下创建表。
关于键,除非数据库知道如何为该列生成值,否则它也应该在模型中。