在Node.js 的后端开发中, Sequelize 是一个十分强大的 ORM(对象关系映射)工具,它可以简化数据库操作并提高开发效率。在使用 Sequelize 进行数据存储时,时间戳是一个非常重要的数据类型,它可以记录实体(如用户、文章等)的创建时间和最后更新时间。
本篇文章将介绍如何在 Sequelize ORM 中使用时间戳,并提供一些示例代码以帮助读者快速了解和运用。
什么是时间戳?
在数据库中,时间戳通常是一个表示日期时间的整数或浮点数,它记录了特定实体的创建时间、最后更新时间或其他重要的时间点。时间戳通常以 UNIX 时间戳格式存储,即自1970年1月1日以来经过的毫秒数。在 Sequelize 中,我们可以使用一个称为“timestamps”的选项来设置时间戳。
在 Sequelize 中启用时间戳
要在 Sequelize 中启用时间戳,我们可以使用 Model.init 选项中的 timestamps 字段。timestamps 字段是一个布尔值或一个对象,指示 Sequelize 是否自动向模型添加 createdAt 和 updatedAt 字段。下面是一个设置 timestamps 的示例:
-- -------------------- ---- ------- ----- - ---------- ------ --------- - - --------------------- ----- --------- - --- ----------------------------- ----- ---- ------- ----- -- ----------- ----- ---------------- -- - ---------- ----------- ---- --- ------ -- -- - ----- ---------------- ------ ---- --- -----
在上面的示例中,我们在调用 User.init 时传递了一个选项对象,其中的 timestamps 值设置为 true。这将告诉 Sequelize 在 User 模型中创建 createdAt 和 updatedAt 字段。
我们还可以传递一个对象给 timestamps 选项,以对 createdAt 和 updatedAt 字段进行自定义设置。下面是一个示例:
timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }
在上面的示例中,我们将 createdAt 字段命名为 created_at,将 updatedAt 字段命名为 updated_at。
在模型中使用时间戳
启用时间戳后,我们可以在模型中使用 createdAt 和 updatedAt 字段。这些字段通过模型实例来设置和获取,也可以在创建或更新实例时自动填充。下面是一个示例:
const user = await User.create({ name: 'Alice' }); console.log(user.createdAt); // 2022-01-01T00:00:00.000Z console.log(user.updatedAt); // 2022-01-01T00:00:00.000Z user.name = 'Bob'; await user.save(); console.log(user.updatedAt); // 2022-01-02T00:00:00.000Z
在上面的示例中,我们创建了一个名为 Alice 的用户,并记录了创建时间和最后更新时间。我们还将 Alice 的名字更改为 Bob,并更新了实例的 updatedAt 字段。
关闭时间戳
如果你的模型不需要时间戳,你可以在定义模型时禁用时间戳。下面是一个示例:
class User extends Model {} User.init({ name: DataTypes.STRING }, { sequelize, timestamps: false // 禁用时间戳 });
在上面的示例中,我们将 timestamps 选项设置为 false,禁用了时间戳。这将不会在 User 模型中创建 createdAt 和 updatedAt 字段。
总结
在 Sequelize ORM 中使用时间戳是十分常见的操作。我们可以使用 timestamps 选项来启用或禁用时间戳,并使用 createdAt 和 updatedAt 字段来记录创建时间和最后更新时间。通过本文的介绍,相信读者已经可以轻松使用时间戳来简化数据存储操作。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64f05bc1f6b2d6eab3a5e088