我想使用sequelize-typescript
在MariaDB中存储一个简单的JSON-Array。这是一个可以在PostgreSQL,SQLite和MySQL中运行的基本模型。
class MyModel extends Model<MyModel> {
@Column({
type: DataType.JSON
})
options!: string[]
}
要在MariaDB中获得相同的行为,我尝试了四件事:
@AfterFind
或其他挂钩。问题:如本issue in the github repo所述,存在一个已知的错误,即钩子不会在包含的模型上触发,因此没有机会
问题::即使复制example in the sequelize-docs也会引发各种打字稿编译器问题,即使我使用any
类型并欺骗TS编译器,我也不知道如何分辨在其他模型中,有一个新的数据类型。
class MyModel extends Model<MyModel> {
@Column({
type: DataType.STRING
})
get options(): string[] {
return JSON.parse(this.getDataValue('options'))
}
set options(value: string[]) {
this.setDataValue('options', JSON.stringify(value))
}
}
这会引发getDataValue
和setDataValue
方法的编译器错误:
Argument of type 'string' is not assignable to parameter of type 'this["options"]'
Type 'string' is not assignable to type 'string[]'
有效的方法是将Array作为字符串存储在数据库中,并使用getter / setter访问和解析此属性。
class MyModel extends Model<MyModel> {
@Column
_options!: string;
get options(): string[] {
return JSON.parse(this._options)
}
set options(value: string[]) {
this._options = JSON.stringify(value)
}
}
就像我说的那样,这行得通,但是我希望有一些通用的东西,对于大量字段(例如自定义数据类型)更快地运行。
所以我的问题是:
是否有一种方便,简短,轻松,动态且可重用的方式将JSON存储在MariaDB中?