Sequelize 中对模型关系的深入理解

阅读时长 5 分钟读完

前言

Sequelize 是一个流行的 Node.js ORM(对象关系映射)框架,它可以方便地操作各种关系型数据库,如 MySQL、PostgreSQL、SQLite 等。在使用 Sequelize 的过程中,我们经常需要定义数据表之间的关系,这就需要用到 Sequelize 中的模型关系。本文将会深入地理解 Sequelize 中的模型关系,帮助大家在开发过程中更加高效地使用 Sequelize。

开始

在 Sequelize 中,关系的定义是通过模型之间的关联来实现的。在具体操作之前,先看一下 Sequelize 中常用的关系类型:

  1. belongsTo:表示一个模型属于另一个模型(一对一/多);
  2. hasOne:表示一个模型拥有另一个模型(一对一);
  3. hasMany:表示一个模型拥有多个另一个模型(一对多);
  4. belongsToMany:表示两个模型之间是多对多关系。

对于每种关系类型,Sequelize 都提供了对应的方法用于定义模型之间的关系。下面我们来一一讲解。

belongsTo

belongsTo 表示一个模型属于另一个模型,一般用于实现一对一或一对多关系。举个例子,假设我们有两个模型 UserCompany,并且一个用户只能属于一个公司,但是一个公司可以属于多个用户,那么就可以这样定义它们之间的关系:

-- -------------------- ---- -------
-- ---- ----
----- ---- - ------------------------ -
  -- ---
---

-- ------- ----
----- ------- - --------------------------- -
  -- ---
---

-- -- ---- -- -------
------------------------
展开代码

这个操作会在 User 模型中添加一个 companyId 属性,表示这个用户属于哪个公司。

如果想要在查询 User 时也返回它所属的公司信息,可以使用 include 参数,如下所示:

这样就能把 User 和 Company 联合查询出来了。

hasOne

hasOne 表示一个模型拥有另一个模型,一般用于实现一对一关系。举个例子,假设我们有两个模型 UserProfile,并且一个用户只有一个个人资料,那么就可以这样定义它们之间的关系:

-- -------------------- ---- -------
-- ---- ----
----- ---- - ------------------------ -
  -- ---
---

-- ------- ----
----- ------- - --------------------------- -
  -- ---
---

-- -- ---- ---- -------
---------------------
展开代码

这个操作会在 User 模型中添加一个 profileId 属性,表示这个用户的个人资料。

类似于 belongsTo,如果想要在查询 User 时也返回它的个人资料信息,可以使用 include 参数。

hasMany

hasMany 表示一个模型拥有多个另一个模型,一般用于实现一对多关系。举个例子,假设我们有两个模型 PostComment,并且一篇文章可以有多个评论,那么就可以这样定义它们之间的关系:

-- -------------------- ---- -------
-- ---- ----
----- ---- - ------------------------ -
  -- ---
---

-- ------- ----
----- ------- - --------------------------- -
  -- ---
---

-- -- ---- ---- -------
----------------------
展开代码

这个操作会在 Comment 模型中添加一个 postId 属性,表示这个评论所属的文章。

如果想要在查询 Post 时也返回它的评论信息,可以使用 include 参数。

belongsToMany

belongsToMany 表示两个模型之间是多对多关系,举个例子,假设我们有两个模型 StudentCourse,并且一个学生可以选多门课程,一门课程也可以被多个学生所选,那么这时就需要使用 belongsToMany 来定义它们之间的关系:

-- -------------------- ---- -------
-- ------- ----
----- ------- - --------------------------- -
  -- ---
---

-- ------ ----
----- ------ - -------------------------- -
  -- ---
---

-- ------- - ------ --------
-- -------- ------------ ------------------
----- ---------- - ------------------------------ -
  -- ---
---

----------------------------- - -------- ---------- ---
----------------------------- - -------- ---------- ---
展开代码

这个操作会在 Student 和 Course 模型中添加一个 Enrollments 属性,表示它们之间的关系。

如果想要查询某个学生选的全部课程,可以这样查询:

这样就能查询到该学生选的全部课程。

结尾

本文介绍了 Sequelize 中的四种模型关系类型,并详细讲解了它们的定义和使用方法,希望能帮助大家更好地使用 Sequelize。同时,也提醒大家在使用 Sequelize 时需要注意数据表之间的关系,以保证数据能够正确地保存和查询。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67c35019314edc2684d2daf9

纠错
反馈

纠错反馈