Sequelize 中如何实现多对一关系

阅读时长 4 分钟读完

在 Web 应用程序的开发中,多对一关系是很常见的,例如,一个订单可以对应一个用户,一个评论可以对应一个文章等等。在 ORM 工具 Sequelize 中,可以很方便地实现多对一关系。

关系类型

在 Sequelize 中,多对一关系有四种类型:

  • BelongsTo:属于关系,例如,订单属于用户;
  • HasOne:拥有关系,例如,用户拥有订单;
  • HasMany:拥有多个关系,例如,文章有多条评论;
  • BelongsToMany:属于多个关系,例如,学生属于多个班级。

在本文中,我们重点介绍 BelongsTo 关系类型的实现方法。

Sequelize 模型

在 Sequelize 中,每个数据库表都需要对应一个模型(Model),模型中定义了表中的各字段和关系。下面是一个 User 和 Order 两个模型的定义方式:

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

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

BelongsTo 关系

BelongsTo 关系是属于关系,例如,订单属于用户。在 Sequelize 中,实现 BelongsTo 关系需要在 Order 模型中,定义一个 userId 字段,并通过 belongsTo() 方法关联 User 模型。

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

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

在上面的代码中,belongsTo() 方法将 Order 模型关联到 User 模型上。这样,Order 模型就可以通过 userId 关联到 User 模型,实现了多对一关系。

查询关联数据

通过定义 BelongsTo 关系之后,你可以很方便地查询关联数据。例如,查询某个订单的用户信息:

在上面的查询中,include 参数指定要查询的关联模型,这里传入 User,表示要查询订单的用户信息。查询结果中,order.user 实际上是一个 User 模型实例,可以通过它来访问用户信息。

修改关联数据

如果需要修改关联数据,例如,将某个订单的用户改为某个其他用户:

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

在上面的代码中,先查询出订单和要关联的用户,在将 order.user 设置为 user,然后调用 save() 方法将修改保存到数据库。

总结

在 Sequelize 中,实现多对一关系很简单,只需要通过定义关联字段和关联方法,就可以创建 BelongsTo 关系。然后,通过 include 参数就可以查询关联模型的数据,也可以修改关联数据。本文只介绍了 BelongsTo 关系类型的实现方法,其他关系类型的使用方法也类似。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6538e7777d4982a6eb210a75

纠错
反馈