Skip to content

Data Model

ctx.model 是 Koishi 的内置服务。其上的方法可以用于定义或扩展数据表及其字段。

数据类型

数据类型会被用于 model.extend() 方法中,其定义如下:

ts
export interface Field<T> {
  type: string
  length?: number
  nullable?: boolean
  initial?: T
  comment?: string
  legacy?: string[]
}

数值类型

名称TS 类型默认长度默认初始值说明
integernumber100有符号整型数,长度决定了数据的范围
unsignednumber100无符号整型数,长度决定了数据的范围
floatnumber固定长度0单精度浮点数
doublenumber固定长度0双精度浮点数

字符串类型

名称TS 类型默认长度默认初始值说明
charstring64''定长的字符串
stringstring255''变长的字符串
textstring65535''变长的字符串

时间类型

名称TS 类型默认长度默认初始值说明
dateDate固定长度null日期值
timeDate固定长度null时间值
timestampDate固定长度null时间戳

其他类型

名称TS 类型默认长度默认初始值说明
jsonobject65535null可被序列化为 json 的结构化数据
liststring[]65535[]字符串构成的列表,序列化时以逗号分隔

实例方法

ctx.model.extend(name, fields, config?)

  • name: string 数据表名
  • fields: Field.Config 字段信息
  • config: Table.Meta 表的基本配置
    • config.primary: string | string[] 主键名,默认为 'id'
    • config.unique: (string | string[])[] 值唯一的键名列表
    • config.foreign: Dict<[string, string]> 外键列表 实验性
    • config.autoInc: boolean 是否使用自增主键

扩展一个新的数据表。

ctx.model.create(name, data)

  • name: string 数据表名
  • data: any 数据

创建一条新的数据,折叠嵌套属性,并填充必要的默认值。

ctx.model.migrate(name, fields, callback) 实验性

  • name: string 数据表名
  • fields: Field.Config 要迁移的字段信息
  • callback: (db: Database) => Promise<void> 迁移的回调函数

设置 整表迁移 的操作。