Mikro ORM
GQLoom 对于 Mikro ORM 的基础目前处于实验阶段。可能还缺失一些常用的功能。现有的功能还缺乏完善的测试。如果有任何问题,请随时在 GitHub 上报告。
MikroORM 是一个出色的 TypeScript ORM,支持多种数据库,如 MySQL、PostgreSQL、SQLite 等。
@gqloom/mikro-orm
提供了 GQLoom 与 MikroORM 的集成:
- 使用 MikroORM 的 Entity Schema 作为丝线;
- 将丝线编织成 MikroORM 的 Entity Schema;
- 从 MikroORM 的 Entity Schema 生成 GraphQL 操作。
安装
在 Mikro ORM 文档中,你可以找到更多关于安装的信息。
使用 MikroORM 的 Entity Schema 作为丝线
使用 mikroSilk
方法将 MikroORM 的 Entity Schema 作为丝线:
自定义类型映射
为了适应更多的数据库列类型,我们可以拓展 GQLoom 为其添加更多的类型映射。
首先我们使用 MikroWeaver.config
来类型映射的配置。这里我们导入来自 graphql-scalars
的 GraphQLDateTime
和 GraphQLJSONObject
标量,当遇到 date
、jsonb
类型时,我们将其映射到对应的 GraphQL 标量。
将丝线编织成 MikroORM 的 Entity Schema
GQLoom 能够将丝线编织成 MikroORM 的 Entity Schema,这让我们用更少的代码定义 Entity Schema。
在下面的示例中,我们将使用 Valibot
Schema 作为丝线定义 MikroORM 的 Entity Schema。
创建编织器
首先,我们需要先创建一个将 Valibot
Schema 编织成 MikroORM 的 Entity Schema 的函数:
定义 MikroORM 的 Entity Schema
在上面的代码中,我们创建的 weaveEntitySchema
函数可以将 Valibot
丝线编织成 MikroORM 的 Entity Schema。
现在我们将使用 weaveEntitySchema
函数来定义 Mikro Entity Schema。
在上面的代码中,我们将 Valibot
的对象作为 weaveEntitySchema
的第一个参数,并在第二个参数中传入 EntitySchema 的配置。在此,我们定义了一个 Author
实体,其包含 id
和 name
两个属性,其中id
为该实体的主键,此为,我们还为 name
属性添加了一个索引。
定义关系
在 MikroORM 中,关系是一种将多个实体连接起来的方式。在 GQLoom 中,我们可以使用 weaveEntitySchema.withRelations
来为实体定义关系。
在上面的代码中,我们使用 weaveEntitySchema.withRelations
为 Book
实体定义了一个关于author
的多对一关系,该关系指向 Author
实体,并且该关系是可选的,你可以在 manyToOne
的第二个参数中定义更多关于该关系的配置。
解析器工厂
GQLoom 提供了直接从 MikroORM 的 Entity Schema 生成 GraphQL 操作的功能,这将极大简化开发过程。
首先,我们需要从 Entity Schema 创建解析器工厂。
在上面的代码中,我们首先定义了一个 Giraffe
实体,然后使用 MikroResolverFactory
创建了一个解析器工厂。从解析器工厂中,我们可以直接生成 GraphQL 操作。
只需要以上简单的代码,我们就可以从 Giraffe
实体生成 GraphQL 操作,并使用 weave
函数将它们编织到 GraphQL Schema 中。
得到的完整的 GraphQL Schema 如下: