续集时间戳名称

时间:2018-01-11 14:36:03

标签: node.js sequelize.js

我有一个关于续集的小问题,我无法绕过它,这让我感到很生气。

我使用camelCase获取我的所有模型属性,但我使用snake case将它们持久存储到数据库中(postgres)。除非我想使用sequelize timestamps选项,否则该部分工作正常。

如果我设置underscored: false,时间戳会持久保存到camelCase中的数据库。

如果我设置underscored: true,它们会被持久化为snake_case但是它们在模型上处于snake_case状态。

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

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

谢谢

2 个答案:

答案 0 :(得分:4)

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

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选项。

答案 1 :(得分:1)

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

更新:正如谢尔盖在回答中所述,我们需要将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