Vona ORM如何实现支持多数据库和多数据源配置?
摘要:在Vona ORM中实现多数据库多数据源非常直观、简便。下面以 Model UserOrder 为例,通过查询用户的订单列表,来演示多数据库多数据源的使用方法
在Vona ORM中实现多数据库/多数据源非常直观、简便。下面以 Model User/Order 为例,通过查询用户的订单列表,来演示多数据库/多数据源的使用方法
准备Models
先准备两个 Models:User/Order
Model Order
@Model({
entity: EntityOrder,
})
class ModelOrder{}
需要指定ModelOrder关联的Entity,限于篇幅,EntityOrder代码从略
Model User
@Model({
entity: EntityUser,
relations: {
orders: $relation.hasMany(() => ModelOrder, 'userId'),
},
})
class ModelUser {}
在ModelUser中定义1:n关系: orders
查询数据
然后查询用户的订单列表
class ServiceOrder {
async selectUserOrders() {
const userId = 1;
const userAndOrders = await this.scope.model.user.get(
{
id: userId,
},
{
include: {
orders: true,
},
},
);
}
}
到目前为止,使用系统默认数据源查询到了userId=1的用户信息,和该用户的所有订单列表
创建多数据源
接下来,创建两个数据源:user-pg和order-mysql
1. 添加数据源的类型定义
在 VSCode 中,通过右键菜单Vona Init/Types在模块中创建类型文件
然后在类型文件中添加类型定义
{module path}/src/types/index.ts
declare module 'vona-module-a-orm' {
export interface IDatabaseClientRecord {
'user-pg': never;
'order-mysql': never;
}
}
IDatabaseClientRecord是模块vona-module-a-orm提供的接口类型。在这里通过接口合并的机制来添加新的数据源类型
2. 数据源配置
在项目的App config文件中定义数据源的配置信息。
