Sequelize 错误:Unknown column 'model_id' 的解决方式

在使用 Sequelize 进行数据库操作时,有时会遇到 "Unknown column 'model_id'" 的错误。这个错误的原因是 Sequelize 在进行模型关联时,会默认使用模型名 + "_id" 作为外键名,但是如果数据库中没有对应的字段,就会出现这个错误。

下面我们将详细介绍如何解决这个问题。

解决方式

1.手动指定外键名

我们可以手动指定外键名,这样就可以避免 Sequelize 默认使用模型名 + "_id" 的方式。在定义模型关联时,可以使用 foreignKey 属性来指定外键名。

例如:

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

2.使用 Sequelize 的命名约定

Sequelize 有一套命名约定,可以让我们避免手动指定外键名。根据这个约定,我们只需要在模型关联时指定 sourceKeytargetKey 属性,Sequelize 就会根据这个约定自动为我们生成外键名。

例如:

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

在上面的代码中,我们指定了 sourceKeytargetKey 属性,Sequelize 就会使用 "id" 作为 User 模型的主键名,使用 "user_id" 作为外键名。

3.修改数据库表结构

如果以上两种方式都无法解决问题,我们还可以尝试修改数据库表结构。我们可以手动添加缺失的字段,这样就可以避免 "Unknown column 'model_id'" 的错误。

例如:

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

在上面的 SQL 语句中,我们向 posts 表中添加了一个 user_id 字段,这样就可以避免 "Unknown column 'user_id'" 的错误。

示例代码

下面是一个完整的示例代码,演示了如何使用 Sequelize 进行模型关联,并避免 "Unknown column 'model_id'" 的错误。

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

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

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

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

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

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

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

在上面的代码中,我们定义了 User 和 Post 两个模型,并使用 hasManybelongsTo 方法定义了模型关联。我们指定了 sourceKeytargetKey 属性,避免了 "Unknown column 'model_id'" 的错误。

总结

遇到 "Unknown column 'model_id'" 的错误时,我们可以手动指定外键名、使用 Sequelize 的命名约定或者修改数据库表结构来解决问题。在实际开发中,我们应该根据具体情况选择合适的解决方式,避免这个错误的出现。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65f53ed32b3ccec22fd62d9c