我的 Sequalize 模型中有一个 Date
列“creation_time”。
当我从数据库中获取行时,结果对象包含“creation_time”列作为日期对象。这是预期的行为。
现在,我希望此列显示为日期字符串。我尝试添加 getter 和 setter 方法,其中我使用 JSON.stringify
将日期对象显式设置为字符串,但此列仅作为日期字段出现。此外,尝试将 get()
方法附加到列定义,但仍然没有变化。
我的模型定义是否有帮助:
class MyModel extends Model {
static associate(models) {
// define association here
}
}
MyModel.init(
{
_id: {
type: DataTypes.UUID,
defaultValue: Sequelize.UUIDV4,
primaryKey: true,
field: 'id'
},
// creation_time: DataTypes.DATE,
creation_time: {
type: DataTypes.DATE,
get() {
return JSON.stringify(this.getDataValue('creation_time'));
}
}
},
{
sequelize,
schema: 'dbo',
modelName: 'my_model',
tableName: 'my_model',
getterMethods: {
creation_time: function () {
return JSON.stringify(this.getDataValue('creation_time'));
}
},
setterMethods: {
creation_time: function () {
return JSON.stringify(this.getDataValue('creation_time'));
}
}
}
);
当我使用以下查询从数据库中获取时,预计列类型会发生变化:const myModel = await MyModel.findOne({
raw: true,
nest: true,
});
最佳答案
如果您有这样的情况,我认为转换 Sequilize 列类型不是一个好主意,那么您应该将列的类型从 Date 保留为 String。
Also, tried attaching get() method to column definition but still no change.
出于上述目的,您不需要任何 getter 或自定义方法,因为 javascript 已为此目的内置了
toString()
方法,例如const myModel = await MyModel.findOne({
raw: true,
nest: true,
});
let date_in_string = myModel.creation_time.toString(); //it will convert it to string notation
console.log(date_in_string);
关于javascript - 从数据库获取后对转换列值进行序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67969447/