【问题标题】:Sequelize timestamp names序列化时间戳名称
【发布时间】:2018-06-20 22:17:57
【问题描述】:

我对 sequelize 有一个小问题,我无法解决,这让我非常恼火。

我对我的所有模型属性都使用了 camelCase,但我使用的是蛇形案例将它们保存到数据库 (postgres) 中。这部分工作正常,除非我想使用 sequelize timestamps 选项。

如果我设置underscored: false,时间戳会以camelCase 形式保存到数据库中。

如果我设置underscored: true,它们会在snake_case 中持续存在,但在模型上它们会在snake_case 中。

我想要实现的是数据库中的snake_case和模型时间戳的camelCase。

感觉这两个选项是互斥的。

谢谢

【问题讨论】:

    标签: node.js sequelize.js


    【解决方案1】:

    是的,你可以。关键是结合模型设置和字段映射。我就是做这个的: 定义模型时,添加以下字段映射:

    createdAt: { type: Sequelize.DATE, field: 'created_at' },
    updatedAt: { type: Sequelize.DATE, field: 'updated_at' },
    deletedAt: { type: Sequelize.DATE, field: 'deleted_at' }
    

    然后在模型选项中:

    timestamps: true,
    underscored: true
    

    对我来说就像一个魅力。这样你也可以正确使用paranoid选项。

    【讨论】:

    • 这是当前版本的 sequlize 中最接近的,但它也是实现您想要的东西的一种 hacky 方式。我采用了这个解决方案,但我仍然不是 100% 满意。原因是当我序列化结果时,我得到字段createdAtcreated_at。因此,我创建了一个自定义 toJSON 方法,该方法将删除重复的 _at 时间戳。总而言之,目前可能的最佳解决方案。谢谢你们和@gokcand 和@Sergey Yarotskiy 的讨论,但我会排除这个答案,因为它确实是第一位的。
    【解决方案2】:

    你可以做一些这样的解决方法:

    更新:正如 Sergey 在他的回答中所说,我们需要将 timestamp 选项保留为 true,所以我修复了这个问题。

    new Sequelize(foo, bar, baz, {
      define: {
        timestamps: true,
        underscored: true
        createdAt: {
            type: DataTypes.DATE,
            defaultValue: DataTypes.NOW,
            name: 'createdAt',
            field: 'created_at'
        }
        updatedAt: {
            type: DataTypes.DATE,
            name: 'updatedAt',
            field: 'updated_at'
        }
      }
    });
    

    Related issue

    【讨论】:

    • 抱歉,不正确,我在我的项目中实现了入门者要求的主题。根据您的配置,updatedAt 不会在更新时自动更新,因为它不受 Sequelize 管理。
    • @SergeyYarotskiy 没有自动的方法可以做到这一点。检查相关问题。所以我展示了一个解决方法。
    • 正如我所说,它目前在生产中对我来说效果很好。
    • @SergeyYarotskiy 是的,但你的也是解决方法?在这两种情况下都需要修改字段映射。
    • 是的,同意,但就我而言,结果将完全符合预期。 Sequelize 将正确管理这些字段。这就是问题所在。在您的情况下,updatedAt 将不会更新。看不到投反对票的原因,因为我的回答是完全正确的。如果没有,请留下建设性意见。
    猜你喜欢
    • 1970-01-01
    • 2017-05-11
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    相关资源
    最近更新 更多