Database
概览
Database 是 Nocobase 提供的数据库交互工具,为无代码、低代码应用提供了非常方便的数据库交互功能。目前支持的数据库为:
- SQLite 3.8.8+
- MySQL 8.0.17+
- PostgreSQL 10.0+
连接数据库
在 Database 构造函数中,可以通过传入 options 参数来配置数据库连接。
详细的配置参数请参考 构造函数。
数据模型定义
Database 通过 Collection 定义数据库结构,一个 Collection 对象代表了数据库中的一张表。
数据库结构定义完成之后,可使用 sync() 方法来同步数据库结构。
更加详细的 Collection 使用方法请参考 Collection。
数据读写
Database 通过 Repository 对数据进行操作。
更加详细的数据 CRUD 使用方法请参考 Repository。
构造函数
签名
constructor(options: DatabaseOptions)
创建一个数据库实例。
参数
迁移相关方法
addMigration()
添加单个迁移文件。
签名
addMigration(options: MigrationItem)
参数
示例
addMigrations()
添加指定目录下的迁移文件。
签名
addMigrations(options: AddMigrationsOptions): void
参数
示例
工具方法
inDialect()
判断当前数据库类型是否为指定类型。
签名
inDialect(dialect: string[]): boolean
参数
getTablePrefix()
获取配置中的表名前缀。
签名
getTablePrefix(): string
数据表配置
collection()
定义一个数据表。该调用类似与 Sequelize 的 define 方法,只在内存中创建表结构,如需持久化到数据库,需要调用 sync 方法。
签名
collection(options: CollectionOptions): Collection
参数
options 所有配置参数与 Collection 类的构造函数一致,参考 Collection。
事件
'beforeDefineCollection':在定义表之前触发。'afterDefineCollection':在定义表之后触发。
示例
getCollection()
获取已定义的数据表。
签名
getCollection(name: string): Collection
参数
示例
hasCollection()
判断是否已定义指定的数据表。
签名
hasCollection(name: string): boolean
参数
示例
removeCollection()
移除已定义的数据表。仅在内存中移除,如需持久化,需要调用 sync 方法。
签名
removeCollection(name: string): void
参数
事件
'beforeRemoveCollection':在移除表之前触发。'afterRemoveCollection':在移除表之后触发。
示例
import()
导入文件目录下所有文件作为 collection 配置载入内存。
签名
async import(options: { directory: string; extensions?: ImportFileExtension[] }): Promise<Map<string, Collection>>
参数
示例
./collections/books.ts 文件定义的 collection 如下:
在插件加载时导入相关配置:
扩展注册与获取
registerFieldTypes()
注册自定义字段类型。
签名
registerFieldTypes(fieldTypes: MapOf<typeof Field>): void
参数
fieldTypes 是一个键值对,键为字段类型名称,值为字段类型类。
示例
registerModels()
注册自定义数据模型类。
签名
registerModels(models: MapOf<ModelStatic<any>>): void
参数
models 是一个键值对,键为数据模型名称,值为数据模型类。
示例
registerRepositories()
注册自定义数据仓库类。
签名
registerRepositories(repositories: MapOf<RepositoryType>): void
参数
repositories 是一个键值对,键为数据仓库名称,值为数据仓库类。
示例
registerOperators()
注册自定义数据查询操作符。
签名
registerOperators(operators: MapOf<OperatorFunc>)
参数
operators 是一个键值对,键为操作符名称,值为操作符比较语句生成函数。
示例
getModel()
获取已定义的数据模型类。如果没有在之前注册自定义模型类,将返回 Sequelize 默认的模型类。默认名称与 collection 定义的名称相同。
签名
getModel(name: string): Model
参数
示例
注:从 collection 中获取的模型类并不与注册时的模型类严格相等,而是继承自注册时的模型类。由于 Sequelize 的模型类在初始化过程中属性会被修改,所以 NocoBase 自动处理了这个继承关系。除类不相等以外,其他所有定义都可以正常使用。
getRepository()
获取自定义的数据仓库类。如果没有在之前注册自定义数据仓库类,将返回 NocoBase 默认的数据仓库类。默认名称与 collection 定义的名称相同。
数据仓库类主要用于基于数据模型的增删改查等操作,参考 数据仓库。
签名
getRepository(name: string): RepositorygetRepository(name: string, relationId?: string | number): Repository
参数
当名称是形如 'tables.relactions' 的带关联的名称时,将返回关联的数据仓库类。如果提供了第二个参数,数据仓库在使用时(查询、修改等)会基于关系数据的外键值 。
示例
假设有两张数据表文章与作者,并且文章表中有一个外键指向作者表:
数据库事件
on()
监听数据库事件。
签名
on(event: string, listener: (...args: any[]) => void | Promise<void>): void
参数
事件名称默认支持 Sequelize 的 Model 事件。针对全局事件,通过 <sequelize_model_global_event> 的名称方式监听,针对单 Model 事件,通过 <model_name>.<sequelize_model_event> 的名称方式监听。
所有内置的事件类型的参数说明和详细示例参考 内置事件 部分内容。
off()
移除事件监听函数。
签名
off(name: string, listener: Function)
参数
示例
数据库操作
auth()
数据库连接验证。可以用于确保应用与数据已建立连接。
签名
auth(options: QueryOptions & { retry?: number } = {}): Promise<boolean>
参数
示例
reconnect()
重新连接数据库。
示例
closed()
判断数据库是否已关闭连接。
签名
closed(): boolean
close()
关闭数据库连接。等同于 sequelize.close()。
sync()
同步数据库表结构。等同于 sequelize.sync(),参数参考 Sequelize 文档。
clean()
清空数据库,将删除所有数据表。
签名
clean(options: CleanOptions): Promise<void>
参数
示例
移除除 users 表以外的所有表。

