Sequelize 如何实现模型之间的多对多关联
在多对多关联中,一个模型可以关联多个模型,而一个模型也可以被多个模型关联。Sequelize 作为一种 ORM 框架,提供了一种方便的方式来实现这种关联。
1. 创建多对多关联
假设我们有两个模型,分别是 User 和 Project,我们要实现一个多对多的关联,表示一个用户拥有多个项目,一个项目属于多个用户。首先,我们需要在两个模型中定义多对多关联。
-- -------------------- ---- ------- -- ---- -- ----- ---- - ------------------------ - ----- ---------------- --- -- ------- -- ----- ------- - --------------------------- - ----- ---------------- ---
在模型定义中,我们使用 sequelize.define() 来创建模型,并将模型的属性和类型传递给它。接下来,我们需要通过 belongsToMany() 函数来定义多对多关联。
// 多对多关联
User.belongsToMany(Project, { through: 'UserProject' });
Project.belongsToMany(User, { through: 'UserProject' });在这里,我们定义了两个模型之间的多对多关联。belongsToMany() 函数接收两个参数:目标模型和中间表信息。我们使用 through 参数指定中间表名。
2. 中间表信息
在上一步中,我们使用了 through 参数指定中间表名。中间表有两个关联模型的 ID,所以我们需要在中间表中定义两个外键,分别指向两个模型的 ID。
-- -------------------- ---- -------
-- -----
----- ----------- - ------------------------------- -
------- -
----- ------------------
----------- -
------ -------
---- ----
-
--
---------- -
----- ------------------
----------- -
------ ----------
---- ----
-
-
---在中间表定义中,我们使用 sequelize.define() 来创建中间表模型,并定义了两个外键:userId 和 projectId。我们使用 references 参数来指定外键所指向的模型和 ID。
3. 查询多对多关联
在创建多对多关联之后,我们可以使用 include 属性来查询关联模型的实例。假设我们要查询一个用户拥有的所有项目,我们可以这样写:
const user = await User.findOne({
where: {
id: 1
},
include: Project
});
console.log(user.Projects);在这里,我们使用了 findOne() 函数查询了一个用户实例。通过在查询中使用 include 属性,我们可以使用 Project 模型查询出所有关联的项目实例。最后,我们可以通过 user.Projects 属性获取一个用户拥有的所有项目。
4. 删除多对多关联
在多对多关联中,我们可以使用 remove 函数来删除关联实例。假设我们要删除一个用户的某个项目,我们可以这样写:
-- -------------------- ---- -------
----- ---- - ----- --------------
------ -
--- -
--
-------- -------
---
----- ------- - -----------------
----- ----------------------------在这里,我们查询了一个用户实例,并获取了他的第一个项目实例。接下来,我们使用 removeProject() 函数删除了这个项目的关联。
5. 总结
在本文中,我们介绍了 Sequelize 如何实现模型之间的多对多关联。首先,我们定义了两个模型并使用 belongsToMany() 函数定义了多对多关联。接下来,我们创建了一个中间表模型,并定义了两个外键指向两个模型的 ID。最后,我们可以通过 include 属性来查询关联实例,并使用 remove 函数删除关联实例。
Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/6459c735968c7c53b0be4cca