Sequelize(ORM) 教程:Model(模型)基础详解

前言

Sequelize 是 Node.js 中一种流行的 ORM(Object-Relational Mapping)框架,它提供了一种将关系型数据库中的数据映射为 JavaScript 对象的方式,从而简化了数据库操作的复杂度。本文将重点介绍 Sequelize 中的 Model(模型)基础知识,包括 Model 的定义、属性设置、关联关系配置等。

Model 的定义

在 Sequelize 中,Model 代表了数据库中的一个表,它是一个 JavaScript 类,用于描述表的结构和操作。Model 的定义一般放在一个单独的文件中,可以通过 sequelize.define() 方法进行定义。下面是一个简单的例子:

在上面的例子中,我们定义了一个名为 User 的 Model,它对应了数据库中的一个名为 users 的表。我们使用 sequelize.define() 方法定义了 User Model 的属性,其中 firstNamelastName 分别对应了表中的两个字段。DataTypes.STRING 表示这两个字段的类型为字符串,allowNull 表示这两个字段是否允许为空。在定义 Model 的时候,还可以设置其他的参数,例如表名、时间戳、索引等。

属性设置

在 Sequelize 中,Model 的属性设置是非常灵活的,可以设置各种类型的属性,例如字符串、数字、日期、布尔值、JSON 对象等。下面是一些常用的属性设置:

字符串类型

在上面的例子中,我们定义了一个名为 User 的 Model,它包含了四个字符串类型的属性:firstNamelastNameemailpassword。其中,email 属性设置了 unique: true,表示该属性的值必须唯一;password 属性设置了 validate,表示该属性的值必须符合指定的规则。

数字类型

在上面的例子中,我们定义了一个名为 User 的 Model,它包含了三个数字类型的属性:ageheightweight。其中,age 属性设置了默认值为 0,weight 属性设置了精度为 10 位,小数点后有 2 位。

日期类型

在上面的例子中,我们定义了一个名为 User 的 Model,它包含了三个日期类型的属性:birthdaycreatedAtupdatedAt。其中,createdAtupdatedAt 属性设置了默认值为当前时间。

布尔类型

在上面的例子中,我们定义了一个名为 User 的 Model,它包含了一个布尔类型的属性:isActive。其中,isActive 属性设置了默认值为 true。

JSON 类型

在上面的例子中,我们定义了一个名为 User 的 Model,它包含了一个 JSON 类型的属性:preferences。该属性可以存储任意的 JSON 对象。

关联关系配置

在 Sequelize 中,Model 之间可以建立多种不同的关联关系,例如一对一、一对多、多对多等。下面是一些常用的关联关系配置:

一对一关系

在上面的例子中,我们定义了两个 Model:UserProfile。它们之间建立了一对一的关系,即一个用户对应一个个人资料,一个个人资料也对应一个用户。我们使用 User.hasOne(Profile) 方法和 Profile.belongsTo(User) 方法分别定义了两个 Model 之间的关联关系。

一对多关系

在上面的例子中,我们定义了两个 Model:UserPost。它们之间建立了一对多的关系,即一个用户可以发布多篇文章,一篇文章只能由一个用户发布。我们使用 User.hasMany(Post) 方法和 Post.belongsTo(User) 方法分别定义了两个 Model 之间的关联关系。

多对多关系

在上面的例子中,我们定义了三个 Model:UserProjectUserProject。它们之间建立了多对多的关系,即一个用户可以参加多个项目,一个项目也可以有多个成员。我们使用 User.belongsToMany(Project, { through: UserProject }) 方法和 Project.belongsToMany(User, { through: UserProject }) 方法分别定义了两个 Model 之间的关联关系,并指定了中间表为 UserProject

总结

本文介绍了 Sequelize 中的 Model(模型)基础知识,包括 Model 的定义、属性设置、关联关系配置等。Sequelize 提供了非常灵活的 Model 定义和关联关系配置方式,可以满足不同的业务需求。希望本文能够对读者理解 Sequelize 提供的 ORM 框架有所帮助。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/655f25b2d2f5e1655d955318


纠错
反馈