Sequelize 求援! save 也保存关联模型

阅读时长 4 分钟读完

前言

Sequelize 是 Node.js 中使用最广泛的 ORM 框架之一,它提供了丰富的 API 和清晰的文档,方便开发者快速高效地操作数据库。然而,在处理模型之间的关联时,有一个非常常见的问题:如何在保存一个模型实例时同时保存其关联模型实例。本文将介绍如何使用 Sequelize 将一个模型与其关联模型保存到数据库中。

关联模型的保存

在 Sequelize 中,模型之间可以通过 belongsTo、hasOne 以及hasMany 方法建立起关系。例如,一个 Post 模型可以关联到一个 User 模型,代码如下:

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

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

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

上述代码中,Post 模型属于 User 模型,即一个 User 模型可以对应多个 Post 模型。

想要同时保存一个 Post 模型实例和其关联的 User 模型实例,我们可以使用事务(Transactions)。一个事务是一个数据库操作的集合,要么全部被执行,要么全部回滚,保证数据的一致性和完整性。Sequelize 提供了方便的事务 API,我们可以很容易地完成保存过程。

下面的示例代码演示如何在保存一个 Post 模型实例时,同时保存其关联的 User 模型实例:

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

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

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

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

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

上述代码中,我们使用 Sequelize 提供的 transaction 方法创建了一个事务对象,在该事务中先创建了一个 User 模型实例,然后将其 id 作为 UserId 属性传递给了 Post 模型实例,并在 transaction 方法所返回的 Promise 中打印出保存后的实例。当事务操作遇到异常时,Sequelize 会自动回滚。

总结

以上就是本文介绍的关于 Sequelize 中保存关联模型实例的内容。通过事务的方式,我们可以方便地同时保存多个互相依赖的模型实例,并保证操作的原子性。Sequelize 的文档中也提供了更多关于事务和模型关联的详细介绍,读者可以前往参考。

参考

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

纠错
反馈