在关系型数据库中,多对多关系是一种常见的关系类型。正如他的名字一样,它描述了一个实体和另一个实体之间有多个关系,其中每个实体可能与多个另一个实体相关联。
在本文中,我们将介绍如何使用 Sequelize ORM(对象关系映射)来实现多对多关系。
建立多对多关系
在 Sequelize 中创建多对多关系需要使用多个步骤和不同的模型。
首先,我们需要创建一个名为 Article
的模型和一个名为 Tag
的模型。每篇文章都可以与多个标签相关联,每个标签也可以与多篇文章相关联。这是一个经典的多对多关系示例。
-- -------------------- ---- ------- -- ---------- -------------- - ----------- ---------- -- - ----- ------- - --------------------------- - ------ ----------------- -------- --------------- --- ------ -------- - -- ------ -------------- - ----------- ---------- -- - ----- --- - ----------------------- - ----- ----------------- --- ------ ---- -
接下来,我们需要定义一个中间模型。这个模型必须具有两个外键分别与 Article
和 Tag
模型关联。这个模型也必须被命名为 ArticleTag
。这个模型中的外键将在数据库中自动创建。
// ArticleTag.js module.exports = (sequelize, DataTypes) => { const ArticleTag = sequelize.define('ArticleTag', {}); return ArticleTag; }
在完成模型定义后,Sequelize 将自动为我们创建适当的关联。
在 Article
模型中添加一个 belongsToMany
关联,并指定中间模型 ArticleTag
。这个方法将会创建一个 tags
属性,并使我们可以在 Article
模型上添加标签。
-- -------------------- ---- ------- -- ---------- -------------- - ----------- ---------- -- - ----- ------- - --------------------------- - ------ ----------------- -------- --------------- --- ----------------- - ------ -- - --------------------------------- - -------- ----------------- --- -- ------ -------- -
在 Tag
模型中添加一个 belongsToMany
关联,并指定中间模型 ArticleTag
。
-- -------------------- ---- ------- -- ------ -------------- - ----------- ---------- -- - ----- --- - ----------------------- - ----- ----------------- --- ------------- - ------ -- - --------------------------------- - -------- ----------------- --- -- ------ ---- -
现在我们已经成功地定义了一个多对多关系,我们可以开始使用它来创建和查询数据。
创建和查询多对多关系
让我们使用 Sequelize 创建一些文章和标签,并将它们相关联。
-- -------------------- ---- ------- ----- -- - -------------------- ------------------------------ -- -- - ----- -------- - ----- ------------------- ------ ------------------- -------- -------------------------- --- ----- -------- - ----- ------------------- ------ ------------------ -------- -------------------- --- ----- ---- - ----- --------------- ----- ----------- --- ----- ---- - ----- --------------- ----- ----- --- ----- ---- - ----- --------------- ----- ---- --- ----- ----------------------- ----- ------- ----- ---------------------- ----- -------- - ----- -------------------- -------- -- ------ ------- ----------- --------- -------- - ----------- -- - -- --- ------------------------------------ ----- ---- ---
该代码将创建两篇文章和三个标签,并将它们相互关联。然后,我们使用 findAll
方法查询 Article
模型并返回其标签。
我们使用 through
选项来指定通过 ArticleTag
模型连接两个模型。我们还指定要返回的属性,在本例中,我们只想返回标签的 name
属性。
输出如下:
-- -------------------- ---- ------- - - ----- -- -------- ------------------- ---------- --------------------------- ------------ --------------------------- ------------ --------------------------- ------- - - ------- ----------- -- - ------- ----- -- - ------- ---- - - -- - ----- -- -------- ------------------ ---------- --------------------- ------------ --------------------------- ------------ --------------------------- ------- - - ------- ----------- - - - -
结论
在本文中,我们学习了如何使用 Sequelize ORM 来实现多对多关系。我们首先定义了多个模型,然后定义了一个中间模型,最后添加了适当的关联。
我们还编写了一些代码来创建和查询相关的数据。这应该为你提供了足够的知识,以便在你的应用程序中使用多对多关系。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6714cbcfad1e889fe215d7ce