快速入门

ent 是一个基于 SQL/Gremlin 构建的易于使用但功能强大的 Go Entity 框架,其遵循以下原则:

  • 轻松将你的数据建模为图结构。

  • 使用代码定义模式。

  • 基于代码生成静态类型。

  • 精简的图遍历。

gopher-schema-as-code

安装

完成 entc (为 ent 生成代码) 的安装后, 你应该将其放入 PATH 中。

创建第一个模式 (Schema)

进行你的项目根目录,并运行命令:

上面的命令将在 <project>/ent/schema/ 目录下为 User 生成模式.

User 模式添加两个字段:

在项目根目录运行命令 entc generate:

会生成以下文件:

创建第一个实体(Entity)

首先, 创建一个新的 ent.Client. 在这个例子中,我们将使用 SQLite3.

现在,我们可以创建我们的用户了. 调用函数 CreateUser :

查询实体

entc 会为每个实体的模式生成到一个包内,并包含条件,默认值,验证器和存储相关的附加信息(列名,主键等)。

添加第一个边 (关系)

在教程的这部分,我们要声明 (关系) 到模式的另一个实体。 让我们创建另外两个名为 CarGroup 且有一些字段的实体。 我们使用 entc 去生成初始模式。

然后我们手动添加剩下的字段:

定义我们的第一个关系,定义一个从 UserCar 的边: 一个用户可以 有一辆或多辆 汽车,但是一辆汽车 只有一个 车主 (一对多关系)。

er-user-cars

让我们添加 "cars" 的边到 User 的模式中, 然后运行 entc generate ./ent/schema:

下一个实例: 给一个用户添加两辆车。

怎么查询 cars 的边(关系)呢? 我们是这么做的:

添加第一个逆边(反向引用)

假设我们有一个 Car 对象,并且我们想知道它的车主;即 Car 属于哪个 User. 对于这种情况,我们有另一种叫做 “逆边” 的边类型,他的定义函数是 edge.From.

er-cars-owner

上图中半透明部分就是新的边,要强调的是,我们不会在数据库中创建这条边 它只是对上面的边的反向引用。

让我们为 Car 模式添加一个叫 owner 的逆边,将其引用至 User 模式中的 cars 边 然后运行 entc generate ./ent/schema.

接着上面的 user/cars 例子,我们来查询逆边。

创建第二个边

继续看例子,我们将在 users 和 groups 之间创建一个 M2M (多对多)的关系。

er-group-users

如图所示,每个群组实体可以 拥有多个 用户,一个用户也可以 被连接到多个 群组,一个简单的 “多对多” 关系。 在上图中,Group 模式是 users 边(关系)的拥有者, User 实体有一个名为 groups 的反向引用/逆边。 开始定义这个多对多关系:

  • <project>/ent/schema/group.go:

  • <project>/ent/schema/user.go:

运行 entc 重新生成代码。

运行第一个图遍历

为了运行第一个图遍历,我们需要生成一些数据(节点和边,或者说实体和关系)。 让我们使用 ent 创建下面的图:

re-graph

现在我们得到了一个有数据的图,我们可以运行一些查询:

  1. 获取 "GitHub" 群组所有用户的全部汽车:

  2. 修改上面的查询, 将遍历的起源修改为用户 Ariel (Ariel 所属群组的用户的汽车):

  3. 获取有用户(非空)的群组 (使用自动生成的条件查询):

完整的例子请参考: GitHub.

Last updated

Was this helpful?