Sequelize 中关于 BelongsToMany 关系的详细教程

阅读时长 5 分钟读完

在 Sequelize 中,BelongsToMany 是指两个 model 之间的 N:M 的关系,即 A model 中的一个实例可以对应 B model 中的多个实例,B model 中的一个实例也可以对应 A model 中的多个实例。这个关系通过中间表来实现,而 Sequelize 中的多对多关系需要用到 BelongsToMany。

关系示意图

在这个示意图中,User 与 Group 是 N:M 的关系,中间的 user_groups 表即为中间表。

首先定义模型

在示例中,我们定义了 User 和 Group 两个模型,并且建立了中间表 user_groups(通过 belongsToMany 语法实现):

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

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

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

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

这里通过 belongsToMany 来定义 User 与 Group 之间的 N:M 关系,需要通过 through 指定中间表的名称,这里我们指定了 user_groups。

操作关系

Sequelize 中的 BelongsToMany 关系操作相对比较复杂,但是也非常实用,接下来我们将详细讲解如何操作该关系。

创建实例

这个示例中,我们创建一个名为 Alice 的用户,并创建一个名为 Admins 的组,然后将 Alice 添加到 Admins 组中,这是通过 user.addGroup 方法实现的。

在中间表 user_groups 中,将会生成类似于以下的一条记录:

id user_id group_id createdAt updatedAt
1 1 1 2019-09-11 12:00:00.123 +00:00 2019-09-11 12:00:00.123 +00:00

其中,user_id 对应的是 User 表的 id,group_id 对应的是 Group 表的 id,createdAt 和 updatedAt 分别对应的是记录的创建时间和修改时间。

查询实例

这个示例中,我们通过 User 模型的 findOne 方法找到了名称为 Alice 的用户,然后通过 getGroups 方法查询该用户所属的组。

根据条件查询实例

这个示例中,我们根据 User 模型的 findOne 方法找到了名称为 Alice 的用户,然后通过 getGroups 方法查询该用户所属的组,并且我们只查询了名为 Admins 的组。

添加实例到关联

这个示例中,我们通过 User 模型的 findOne 方法找到了名称为 Alice 的用户,然后通过 Group 模型的 findOne 方法找到了名为 Admins 的组,接着通过 addGroup 方法将 Alice 添加到 Admins 组中。

从关联中删除实例

这个示例中,我们通过 User 模型的 findOne 方法找到了名称为 Alice 的用户,然后通过 Group 模型的 findOne 方法找到了名为 Admins 的组,接着通过 removeGroup 方法将 Alice 从 Admins 组中删除。

总结

在 Sequelize 中通过 BelongsToMany 实现多对多关系在实际开发中非常实用,通过本文详细的教程,你已经能够在实际开发中使用 BelongsToMany 来操作 N:M 的关系模型。

完整示例代码:https://github.com/demopark/sequelize-doc-cn/blob/master/belongs-to-many.md

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

纠错
反馈