Sequelize 中的多表关联方法详解

阅读时长 4 分钟读完

什么是 Sequelize

Sequelize 是一个使用 Node.js 实现的基于 Promise 的 ORM(Object-Relational Mapping)框架,它提供了基于 JavaScript 对象与关系数据库表之间进行映射的能力,方便了开发者在 Node.js 中进行数据库操作。

使用 Sequelize 可以不用手写 SQL 语句,而是使用对象进行 CRUD 操作,对于用户输入的不合法数据以及 SQL 注入攻击等安全问题可以在数据层解决。

联接类型

在 Sequelize 中,从一对一到一对多,再到多对多的关系都可以被定义并统一操作。定义模型时,可以通过一些工具方法来简单地创建各种类型的关系。

Sequelize 中支持一下五种关系类型:

  • belongsTo: 外键是存在在源模型中的。
  • hasOne: 外键是存在在目标模型中的。
  • hasMany: 外键是存在在目标模型中的。
  • belongsToMany: 通过中间表将两个模型相互关联起来,中间表将被命名为模型的名称,源模型的名称和目标模型的名称,按照字典序排序后连接而成。

使用实例

以下是两个表的定义:

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

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

其中,文章表的 userId 属性是外键,它引用了用户表的 id 属性。我们会将两个模型相互关联到一起。

一对多的关系

一个用户可以发布多篇文章,这是一对多的关系。因此,在文章模型中,我们应当使用 belongsTo 方法将外键定义在源模型(文章)中:

然后,我们可以通过 Post.findAll() 获取所有文章及其对应的用户信息:

多对多的关系

一个用户可以关注多个用户,一个用户也可以拥有多个粉丝,这是多对多的关系。

我们需要创建一个关注表,来存储两个用户之间的关系。

上面代码中,User.belongsToMany(User) 表示一个用户可以关注多个用户,也可以拥有多个粉丝。as 参数用于指定关联对象在 Sequelize 中的名称,through 参数指定关联的中间表,foreignKey 指定外键的名称。

我们可以通过以下方式查询该用户关注的所有用户:

总结

本文介绍了 Sequelize 的多表关联方法,包括了一对多和多对多的关系,并给出了典型的使用实例。

Sequelize 提供了丰富的操作,可以很好地帮助我们管理数据库,从应用程序的角度来看,Sequelize 的最大优点就是它允许我们使用面向对象的方式进行数据库操作,提高了开发效率。

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

纠错
反馈