Ale*_*lex 10 sequelize.js typescript sequelize-typescript
我想使用sequelize-typescript. 这是一个可以在 PostgreSQL、SQLite 和 MySQL 中工作的基本模型。
class MyModel extends Model<MyModel> {
@Column({
type: DataType.JSON
})
options!: string[]
}
Run Code Online (Sandbox Code Playgroud)
为了使用 MariaDB 获得相同的行为,我尝试了四件事:
@AfterFind或其他一些钩子。问题:正如github repo中的这个问题所述,有一个已知的错误,即钩子不会在包含的模型上触发,所以没有机会
问题:即使复制sequelize-docs 中的示例也会引发各种打字稿编译器问题,即使我使用any类型并欺骗 TS 编译器,我也不知道如何告诉我的其他模型有一个新的 DataType。
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))
}
}
Run Code Online (Sandbox Code Playgroud)
这会引发getDataValue和setDataValue方法的编译器错误:
Argument of type 'string' is not assignable to parameter of type 'this["options"]'
Type 'string' is not assignable to type 'string[]'
Run Code Online (Sandbox Code Playgroud)
可行的方法是将数组作为字符串存储在数据库中,并使用 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)
}
}
Run Code Online (Sandbox Code Playgroud)
正如我所说,这是可行的,但我更希望有一些更通用的东西,可以更快地处理大量字段,例如自定义数据类型。
所以我的问题是:
是否有一种方便、简短、简单、动态和可重用的方式来将 JSON 存储在 MariaDB 中?