Skip to content

資料模型 (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> 迁移的回调函数

设置 整表迁移 的操作。