@fxjs/orm-property

orm-property 提供了对数据库表中的的建模手段. 通过Property meta, 可以定义一个 Property, 在配置对象中, 最重要的是 type 字段. property 的 type 字段决定其基本类型, 其它字段则用于补充说明这个 property 的更多特性和行为.

Property meta

Property meta 是指明建模含义, 模型特性和行为的配置对象, 一个的 Property meta 定义可以包含以下字段:

字段名类型必需意义
typestringrequiredproperty 的基本类型
keybooleanoptional是否是关键 Property, 比如主键, 或是关联关系中的关联键.
primarybooleanoptional是否为 primary key.
requiredbooleanoptional是否是必需的.
mapsTostringoptional映射到实际数据库表中的字段名
uniquebooleanoptional是否为 unique key.
indexstringoptional是否需要索引.
serialbooleanoptional是否为自增整数. 该属性的值可能影响 type 的最终值
defaultValueValue | () => Valueoptional默认值, 或者返回默认值的函数
............

除此以外, 根据 type 的不同, 还可能有其它的补充字段来表示 property 的更多特性和行为. 具体可参考下文中每个 type 的说明章节.

type

ORM 目前支持内置的 property 类型有:

类型意义简写MySQLSQLitePostgreSQL
text文本StringVARCHARTEXTVARCHAR
integer整数-INTEGERINTEGERINTEGER
number数值类型NumberINTEGER
DOUBLE
INTEGER
DOUBLE
INTEGER
DOUBLE
serial自增整数-INTEGER
SERIAL
INTEGER
SERIAL
INTEGER
SERIAL
boolean布尔值BooleanBOOLEANBOOLEANBOOLEAN
date日期DateDATEDATEDATE
binary二进制BufferBLOBBLOBBLOB
object对象ObjectJSONJSONJSON
enum枚举Array<any>ENUMENUMENUM

注意 同样的 type, 在不同的 database backend 中, 可能对应了不同的实际数据库定义, 如, 同样是 { type: 'text', size: 255 }, 在 MySQL 中的定义是 VARCHAR(255), 在 SQLite 和 PostgreSQL 中的定义则是 TEXT.

Property 类型

文本 text

补充字段类型

字段名类型意义
sizenumber若映射的字段具有可变长度(如 mysql 中的 varchar), size 表示希望其拥有的长度
bigboolean若数据库支持, 则 big: true 使用具有较大长度的字段类型, 如 mysql 中的 LONGTEXT

整数 integer

补充字段类型

字段名类型意义
sizeenum: 2, 4, 82: short/smallint; 4: integer; 8: long/bigint. 若传入了其它值, 则修改为 4.
unsignedboolean是否为无符号整数. 该选项仅对 mysql 有意义.
serialboolean是否为自增整数, 若为 truthy, type 会被转化为 serial

浮点数 number

补充字段类型

字段名类型意义
unsignedboolean是否为无符号浮点数. 该选项仅对 mysql < 8.0 有意义.
rationalboolean是否为浮点数, 默认为 truthy, 若指定为 false, type 会被转化为 integer

自增整数 serial

表示自增整数.

注意

  • 指定字段 { "type": "serial" }{ serial: true } 是等价的, 会隐式地启用 { "primary": "true" }.
  • 对于 mysql 而言, 会隐式地启用 { "primary": "true", key: "true" }

布尔值 boolean

表示布尔类型

日期 date

表示日期类型(具体到日)

字段名类型意义
timeboolean是否包含当具体到微秒的时间信息

二进制 binary / object

表示二进制对象

字段名类型意义
bigboolean若数据库支持, 则 big: true 使用具有较大长度的二进制数据, 如 mysql 中的 LONGBLOB

枚举 enum

表示枚举值类型

简写

简写等价配置
String{ type: 'text' }
Number{ type: 'number' }
Boolean{ type: 'boolean' }
Date{ type: 'date' }
Object{ type: 'object' }
Buffer{ type: 'binary' }