在 Sequelize 中,M:N 表示多对多的关系,我们可以使用 belongsToMany
方法来定义这种关系。但是需要注意的是,在建立 M:N 关系时,会自动生成一张中间表,用于存储两个关联表的关联关系。本文将介绍 Sequelize 中 M:N 关系的操作方法。
创建 M:N 关系
首先我们需要在 Sequelize 中定义两个模型,这里我以 User
和 Project
模型为例,它们的关系是多对多。
const User = sequelize.define('User', { name: DataTypes.STRING }); const Project = sequelize.define('Project', { title: DataTypes.STRING });
接下来我们使用 belongsToMany
方法来定义两个模型之间的关系。
User.belongsToMany(Project, { through: 'UserProject' }); Project.belongsToMany(User, { through: 'UserProject' });
上面代码中,through
选项用来指定中间表的名称。
使用中间表
现在我们已经成功地建立了 User
和 Project
两个模型之间的 M:N 关系。下面我们来了解如何在 Sequelize 中操作这个关系。
添加关联关系
我们可以使用 addModel
方法在两个模型之间添加关联关系。
const user = await User.findOne({ where: { id: 1 } }); const project = await Project.findOne({ where: { id: 1 } }); await user.addProject(project);
上面代码中,我们找到了一个 User
和一个 Project
对象,并使用 addProject
方法添加它们之间的关系。这将在中间表中插入一条记录。
删除关联关系
使用 removeModel
方法可以在两个模型之间删除关联关系。
await user.removeProject(project);
上面代码中,我们找到了一个 User
和一个 Project
对象,并使用 removeProject
方法删除它们之间的关系。这将在中间表中删除一条记录。
查询关联关系
我们可以使用 getModels
方法查询两个模型之间的关联关系。
const user = await User.findOne({ where: { id: 1 } }); const projects = await user.getProjects();
上面代码中,我们找到了一个 User
对象,并使用 getProjects
方法查询它与哪些 Project
相关联。
总结
本文介绍了 Sequelize 中 M:N 关系的操作方法,包括如何建立 M:N 关系、如何使用中间表添加、删除和查询关联关系等。希望这篇文章能够对你学习 Sequelize 中 M:N 关系有所帮助。
完整示例代码如下所示:
-- -------------------- ---- ------- ----- - ---------- --------- - - --------------------- ----- --------- - --- --------------------- ----------- ----------- - -------- -------- ----- ----------- --- ----- ---- - ------------------------ - ----- ---------------- --- ----- ------- - --------------------------- - ------ ---------------- --- --------------------------- - -------- ------------- --- --------------------------- - -------- ------------- --- ------ -- -- - ----- ---------------- ------ ---- --- -- ----- -- ------ ----- ---- - ----- ------------- ----- ----- --- ----- ------- - ----- ---------------- ------ ----------- --- ----- ------------------------- -- ------ ----- -------- - ----- ------------------- -- ------ ----- ---------------------------- -------------------------------------- -----
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e2d2c7f6b2d6eab3e1b5db