Sequelize 之 hasOne 和 belongsTo 关系详解及实现

阅读时长 5 分钟读完

什么是 Sequelize

Sequelize 是一个 Node.js 中的 ORM 框架,它支持多种数据库,包括 MySQL、PostgreSQL、SQLite 和 MSSQL 等。ORM 意味着对象关系映射,它将数据库中的表与 JavaScript 对象之间建立映射关系,使开发者能够使用面向对象的方式操作数据库。

hasOne 和 belongsTo 关系概述

在 Sequelize 中,hasOne 和 belongsTo 是常见的关联关系。hasOne 表示一个模型 (Model) 与另一个模型之间存在一对一的关系,而 belongsTo 则表示当前模型属于另一个模型,两个模型之间存在一对一的关系。

举个例子,假设有两个表:一个是 users 表,另一个是 profiles 表。每个用户都有一个对应的个人资料。这种情况下,可以使用 hasOne 和 belongsTo 来建立模型之间的关系。

hasOne 和 belongsTo 关系详解

hasOne 关系

先来看一下 hasOne 的定义:

这个函数用于定义当前模型与目标模型之间的关系。其中,target 是目标模型,options 是定义关联关系的一些参数。

示例代码:

上面的代码表示,一个 User 模型可以拥有一个对应的 Profile 模型。

在定义 hasOne 关系时,可以通过传递 options 进行更多配置:

  • as:定义关联关系的别名,默认是使用目标模型名的单数形式加上 '_id' 作为别名。
  • foreignKey:定义关联关系外键的名称,如果不指定则默认为目标模型名的单数形式加上 '_id' 作为外键名。
  • constraints:定义该关联关系是否启用约束,默认为 true,表示启用。

示例代码:

上面的代码示例中,将关系名称更改为 profile,将外键名称更改为 user_id,并关闭约束。

belongsTo 关系

再来看一下 belongsTo 的定义:

这个函数用于定义当前模型属于目标模型的关系。其中,target 是目标模型,options 是定义关联关系的一些参数。

示例代码:

上面的代码表示,一个 Profile 模型属于一个 User 模型。

同样,也可以通过 options 对关联关系进行更多配置:

  • as:定义关联关系的别名,默认是使用源模型名的单数形式加上 '_id' 作为别名。
  • foreignKey:定义关联关系外键的名称,如果不指定则默认为源模型名的单数形式加上 '_id' 作为外键名。
  • constraints:定义该关联关系是否启用约束,默认为 true,表示启用。

示例代码:

上面的代码示例中,将关系名称更改为 user,将外键名称更改为 user_id,并关闭约束。

实现示例

最后,我们来看一下如何通过 Sequelize 实现一个具有 hasOne 和 belongsTo 关系的表结构。

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

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

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

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

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

上面的代码示例中,我们定义了 User 和 Profile 两个模型,并通过 hasOne 和 belongsTo 建立起关系。在数据库同步完成后,就可以像操作普通模型一样操作它们了。

总结

在 Sequelize 中,hasOne 和 belongsTo 可以用于定义模型之间的关系。这种关系的建立会使模型之间相互依赖,并且可以使用 ORM 方便地操作数据库。通过本文介绍,相信大家已经掌握了如何在 Sequelize 中使用 hasOne 和 belongsTo 定义关系的方法。

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

纠错
反馈