我有一个关于续集的小问题,我无法绕过它,这让我感到很生气。
我使用camelCase获取我的所有模型属性,但我使用snake case将它们持久存储到数据库中(postgres)。除非我想使用sequelize timestamps选项,否则该部分工作正常。
如果我设置underscored: false
,时间戳会持久保存到camelCase中的数据库。
如果我设置underscored: true
,它们会被持久化为snake_case但是它们在模型上处于snake_case状态。
我想要实现的是数据库中的snake_case和用于模型时间戳的模型上的camelCase。
感觉这两个选项是互斥的。
谢谢
答案 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'
}
}
});