简介
sequelize-models-charger 是一个 npm 包,它是为了简化 Sequelize 模型的创建而创建的。
如果你使用过 Sequelize,你会知道在创建模型时,需要写很多代码,如:属性、数据类型、默认值、关联等等。sequelize-models-charger 可以帮助你快速地创建 Sequelize 模型,并且支持关联、扩展等功能。在本篇文章中,我们将详细介绍使用方式。
安装
在安装之前,先要确保你已经安装了 npm 和 Sequelize。
npm install --save sequelize-models-charger
基本使用
sequelize-models-charger 提供了一个 charger
函数,你可以使用该函数来创建模型。
const { charger } = require('sequelize-models-charger'); const { DataTypes } = require('sequelize'); const User = charger('User', { name: DataTypes.STRING, age: DataTypes.INTEGER, updatedAt: DataTypes.DATE, });
上述代码创建了一个名为 User
的模型。其中,name
、age
、updatedAt
是该模型的属性,数据类型分别为:STRING
、INTEGER
、DATE
。
charger
函数的第一个参数是模型名称,第二个参数是包含属性的对象。
属性配置选项
除了基本数据类型之外,sequelize-models-charger 还支持其他的属性配置选项。下面是一些常用的该选项:
allowNull
表示该字段是否允许为空。默认值为 true
。
const User = charger('User', { name: { type: DataTypes.STRING, allowNull: false, }, });
defaultValue
表示该字段的默认值。当没有提供值时,将使用该默认值。
const User = charger('User', { name: { type: DataTypes.STRING, defaultValue: 'anonymous', }, });
primaryKey
表示该字段是否是主键。可以设置多个属性为主键,主键也可以是组合键。
-- -------------------- ---- ------- ----- ---- - --------------- - --- - ----- ------------------ ----------- ----- -- ----- - ----- ----------------- ----------- ----- -- ---
unique
表示该字段是否是唯一的。注意,该选项不是数据库层面的唯一,而是 Sequelize 层面的唯一。
const User = charger('User', { email: { type: DataTypes.STRING, unique: true, }, });
关联
sequelize-models-charger 支持多种类型的关联,包括一对一、一对多、多对多。
一对一
在 Sequelize 中,一对一关系通常通过外键实现。例如,假设我们有一个 User 表和一个 Passport 表。一个用户只能有一个护照,而一本护照也只能属于一个用户。
-- -------------------- ---- ------- ----- ---- - --------------- - ----- ----------------- --- ----- -------- - ------------------- - ------- ----------------- --- --------------------- - --- ----------- ----------- -------- ---
上面的代码创建了一个 User 模型和一个 Passport 模型。同时,我们指定了 User.hasOne(Passport) 表示 User 模型将拥有一个 Passport 模型的关联,外键为 userId。
我们同样可以在 Passport 模型中指定 inverse 关系:
Passport.belongsTo(User, { as: 'user', foreignKey: 'userId' });
一对多
在 Sequelize 中,一对多关系通常通过外键实现。例如,假设我们有一个 User 表和一个 Product 表。一个用户可以有多个产品,但一个产品只能属于一个用户。
-- -------------------- ---- ------- ----- ---- - --------------- - ----- ----------------- --- ----- ------- - ------------------ - ----- ----------------- --- --------------------- - --- ----------- ----------- -------- ---
上面的代码创建了一个 User 模型和一个 Product 模型。同时,我们指定了 User.hasMany(Product) 表示 User 模型将拥有多个 Product 模型的关联,外键为 userId。
我们同样可以在 Product 模型中指定 inverse 关系:
Product.belongsTo(User, { as: 'user', foreignKey: 'userId' });
多对多
在 Sequelize 中,多对多关系需要使用到中间表。例如,假设我们有一个 User 表和一个 Role 表。一个用户可以拥有多个角色,一个角色也可以分配给多个用户。
-- -------------------- ---- ------- ----- ---- - --------------- - ----- ----------------- --- ----- ---- - --------------- - ----- ----------------- --- ----- -------- - ------------------- - ------- ------------------ ------- ------------------ --- ------------------------ - --- ------- ----------- -------- --- ------------------------ - --- ------- ----------- -------- --- ------------------------ - -------- -------- --- ------------------------ - -------- -------- ---
上面的代码创建了 User、Role 和 UserRole 三个模型。同时,我们指定了 Role.belongsToMany(User) 和 User.belongsToMany(Role) 表示 User 模型将和 Role 模型通过 UserRole 模型进行多对多的关联。
示例代码
下面提供一个完整的示例代码:
-- -------------------- ---- ------- ----- - ------- - - ------------------------------------ ----- - --------- - - --------------------- ----- --------- - --- ------------------------------ -------------------- ------------------------ - ----- -------------------- -------- ----------------------- --- ----- ---- - --------------- - ----- ----------------- ---- ------------------ ------- ----------------- --- ----- -------- - ------------------- - ------- ----------------- --- --------------------- - --- ----------- ----------- -------- --- ------------------------ - --- ------- ----------- -------- --- --------------------- - ----- ------------------------- - --------- -------------- - ----------
上面的代码创建了一个名为 User
的模型。其中,name
、age
、gender
是该模型的属性,数据类型分别为:STRING
、INTEGER
、STRING
。在 User
模型中,我们还创建了一个与 Passport
模型的关联,并且使用了 inverse 关系。
总结
sequelize-models-charger 包提供了一种简单易用的方式来创建 Sequelize 模型,可以大大简化模型的创建过程。它还支持多种类型的关联,让 Sequelize 模型之间的关系更加灵活和自然。如果你正在开发一个 Sequelize 应用程序,不要错过使用 sequelize-models-charger 的机会。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60055d2d81e8991b448dae71