import { sql } from 'drizzle-orm'
import { sqliteTable, text, integer, customType, index } from 'drizzle-orm/sqlite-core'
interface ObjectItem {
name: string
aget: number
}
export const testJson = sqliteTable('testJson', {
id: integer('id').primaryKey({ autoIncrement: true }),
name: text('name').notNull(),
code: text('code'),
createdAt: text('created_at')
.notNull()
.default(sql`(datetime('now', 'localtime'))`),
json: json<ObjectItem>(),
})
默认drizzle-orm/sqlite-core中导出的只有基本列,如 int,text等类型。如果某些数据对象的字段是复杂属性(JSON最常见),需要自定义转换器来支持字段的自动序列化入库和反序列化解析
const json = customType<{ data: string; driverData: string }>({
dataType: () => 'text',
toDriver: (value) => {
return value ? JSON.stringify(value) : ''
},
fromDriver: (value) => {
return value ? JSON.parse(value) : value
},
})
本质上存储还是以 text 类型为基底,只是在数据入库和出库时添加序列化处理,如上