如何使用 Sequelize 实现多对多关系?

在关系型数据库中,多对多关系是一种常见的关系类型。正如他的名字一样,它描述了一个实体和另一个实体之间有多个关系,其中每个实体可能与多个另一个实体相关联。

在本文中,我们将介绍如何使用 Sequelize ORM(对象关系映射)来实现多对多关系。

建立多对多关系

在 Sequelize 中创建多对多关系需要使用多个步骤和不同的模型。

首先,我们需要创建一个名为 Article 的模型和一个名为 Tag 的模型。每篇文章都可以与多个标签相关联,每个标签也可以与多篇文章相关联。这是一个经典的多对多关系示例。

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

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

-- ------

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

  ------ ----
-

接下来,我们需要定义一个中间模型。这个模型必须具有两个外键分别与 ArticleTag 模型关联。这个模型也必须被命名为 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