Sequelize 中模型的关联关系:一份详细的指南

阅读时长 5 分钟读完

在使用 Sequelize 进行 Node.js 开发的过程中,我们需要使用到模型的关联关系,以实现数据表之间的连贯操作。本文将详细介绍 Sequelize 中的模型关联关系,包括单向关联、双向关联、一对多关联、多对多关联等,并为读者提供实例代码。

1. 单向关联

单向关联通常用于两个表之间有一方需要拥有外键的场景,比如「用户」表和「订单」表。在 Sequelize 中,我们可以通过定义模型的外键来实现单向关联。

下面是一个示例代码:

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

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

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

在上面的代码中,Order.belongsTo(User) 表示一个订单属于一个用户(单向关联),其中 Order 是订单模型,User 是用户模型。为了实现单向关联,我们在订单模型中定义了外键 UserId,它指向用户模型中的主键 id。

2. 双向关联

双向关联通常用于两个表之间存在互相依赖的场景,比如「文章」表和「用户」表。在 Sequelize 中,我们可以通过定义双向关联来实现两个表之间的互相依赖关系。

下面是一个示例代码:

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

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

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

在上面的代码中,Article.belongsTo(User) 表示一篇文章属于一个用户(单向关联),User.hasMany(Article) 表示一个用户可以写多篇文章(多向关联)。为了实现双向关联,我们在文章模型中定义了外键 UserId,它指向用户模型中的主键 id。

3. 一对多关联

一对多关联通常用于一个表拥有多个子项的场景,比如「部门」表和「员工」表。在 Sequelize 中,我们可以通过定义一对多关联来实现这种场景。

下面是一个示例代码:

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

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

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

在上面的代码中,Department.hasMany(Employee) 表示一个部门有多个员工(多向关联),Employee.belongsTo(Department) 表示一个员工只属于一个部门(单向关联)。为了实现一对多关联,我们在员工模型中定义了外键 DepartmentId,它指向部门模型中的主键 id。

4. 多对多关联

多对多关联通常用于两个表之间存在多对多的关系,比如「学生」表和「课程」表。在 Sequelize 中,我们可以通过定义多对多关联来实现这种场景。

下面是一个示例代码:

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

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

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

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

在上面的代码中,Student.belongsToMany(Course, { through: StudentCourse }) 表示一个学生可选多门课程(多向关联),Course.belongsToMany(Student, { through: StudentCourse }) 表示一门课程也可被多个学生选(多向关联)。为了实现多对多关联,我们定义了一个或多个中间表模型,其中包含两个表的外键,以将两个表之间的关系映射到数据库中。

结语

在本文中,我们简要介绍了 Sequelize 中的模型关联关系,并提供了一些我们常用的示例代码。我们希望本文可以为读者提供足够的详细信息和指导,以帮助他们更好地使用 Sequelize 进行开发工作。

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

纠错
反馈