表建模
模型是一个扩展 Sequelize.Model 的类. 模型可以用两种等效方式定义. 第一个是Sequelize.Model.init(属性,参数):
const Model = Sequelize.Model;
class User extends Model {}
User.init({
// 属性
firstName: {
type: Sequelize.STRING,
allowNull: false
},
lastName: {
type: Sequelize.STRING
// allowNull 默认为 true
}
}, {
sequelize,
modelName: 'user'
// 参数
});
另一个是使用 sequelize.define
:
const User = sequelize.define('user', {
// 属性
firstName: {
type: Sequelize.STRING,
allowNull: false
},
lastName: {
type: Sequelize.STRING
// allowNull 默认为 true
}
}, {
// 参数
});
在内部, sequelize.define
调用 Model.init
.
上面的代码告诉 Sequelize 在数据库中期望一个名为 users
的表,其中包含 firstName
和 lastName
字段. 默认情况下,表名自动复数(在当下使用inflection 库来执行此操作).通过使用 freezeTableName:true
参数可以为特定模型停止此行为,或者通过使用Sequelize构造函数中的 define
参数为所有模型停止此行为.
Sequelize 还默认为每个模型定义了字段id
(主键),createdAt
和updatedAt
. 当然也可以更改此行为(请查看API参考以了解有关可用参数的更多信息).
更改默认模型参数
Sequelize 构造函数采用 define
参数,它将更改所有已定义模型的默认参数.
const sequelize = new Sequelize(connectionURI, {
define: {
// `timestamps` 字段指定是否将创建 `createdAt` 和 `updatedAt` 字段.
// 该值默认为 true, 但是当前设定为 false
timestamps: false
}
});
// 这里 `timestamps` 为 false,因此不会创建 `createdAt` 和 `updatedAt` 字段.
class Foo extends Model {}
Foo.init({ /* ... */ }, { sequelize });
// 这里 `timestamps` 直接设置为 true,因此将创建 `createdAt` 和 `updatedAt` 字段.
class Bar extends Model {}
Bar.init({ /* ... */ }, { sequelize, timestamps: true });
你可以在Model.init API 参考 或 sequelize.define API 参考 中阅读有关创建模型的更多信息.