Sequelize 中如何处理 PostgreSQL 中的 ENUM 字段类型

阅读时长 4 分钟读完

Sequelize 中如何处理 PostgreSQL 中的 ENUM 字段类型

在 PostgreSQL 中,ENUM 是一种非常常见的数据类型,它允许您指定一组可以用于特定字段的常量值列表。然而,在使用 Sequelize 这样的 ORM 工具时,处理 ENUM 字段类型可能会存在一些困惑。本文将介绍如何在 Sequelize 中处理 PostgreSQL 中的 ENUM 字段类型,以帮助您更好地使用该 ORM 工具。

一、为什么要用 ENUM 字段类型

使用 ENUM 字段类型可以让我们更好地约束字段类型,防止出现不合法的数据,并且在约束了条件之后,也可以更好地展示相关数据。ENUM 字段类型在多种业务场景下都应用广泛,如订单状态、用户类型等等。

二、PostgreSQL 中 ENUM 字段类型的定义

PostgreSQL 中ENUM 的定义方式如下:

其中 mood 的类型枚举了三种值:sad、ok、happy。这样当我们在创建表时使用 mood 类型时,mood 类型只能取 ENUM 中枚举出的值之一。

三、Sequelize 中的 ENUM 类型定义及使用

在 Sequelize 中定义 ENUM 类型很简单,只需要借助 DataTypes.ENUM 即可。

在使用 ENUM 类型时,我们需要手动指定枚举的值列表。当我们再去插入数据时,只有 sad、ok、happy 才是合法数据,其他值会被 Sequelize 自动过滤,防止不合法数据插入表中。

四、示例代码

下面是一个完整的示例代码,其中通过定义 ENUM 字段类型并使用 Sequelize 实现了针对 candidates 表的用户身份认证管理。在 candidates 表中有一个身份认证状态字段 status,只能取 ENUM 中的两个值之一:passed 或 fail。

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

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

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

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

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

  -- ---- --------- --------- - ------- ----------
  --- -
    ----- ---------- - ----- ------------------ ------- ------- ---
    ---------------------------------
  - ----- ------- -
    ---------------------
  -
-----
展开代码

在上述示例代码中,我们定义了一个 candidates 表,并将 status 设为 ENUM 类型,后面通过 create 方法在表中成功插入了一个只包含 status 的记录,同时将 status 设为非法值,也能够被 Sequelize 拦截,不会插入到数据库中。

总结

在 Sequelize 中处理 PostgreSQL 的 ENUM 字段类型,只需要在定义模型时指定 ENUM 类型,并手动指定枚举的值列表。当我们再去插入数据时,只有 ENUM 类型定义里枚举的数据才是合法的,其他值会被 Sequelize 自动过滤,防止不合法数据插入表中。

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

纠错
反馈

纠错反馈