model - 在 Sequelize 中使用模型和迁移
问题描述
假设我正在创建一个用户模型,所以我创建了一个这样的迁移:
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()
过您的模型,则将在没有此约束的情况下创建表。
关于键,除非数据库知道如何为该列生成值,否则它也应该在模型中。
推荐阅读
- python - 从头开始设计一个 CNN
- android-manifest - 合并动态功能清单时出现Android错误
- python-3.x - 如何为 ECB 模式提供有意义的 IV(Python)
- java - java - 如何按空格获取和拆分多个字符串行输入,然后将它们添加到Java中的arrayList?
- apache-kafka - Kafka 生产者/消费者打开了太多的文件描述符
- reactjs - Material-UI 的 Select 组件在关闭时是否使用 setTimeout,如果是,为什么?
- java - 将双精度值与双精度常数进行比较
- arrays - 如何重新排列我的数据?拆分和转置
- java - 我需要帮助,我需要编写一个数组,用 math.random 放置变量并计算斜率
- firebase - 在 Firefox 附加组件中从后台 javascript 注册服务工作者失败