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
函数删除关联实例。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6459c735968c7c53b0be4cca