entgo Edges 的 From 和 To 分别代表什么

1,037 阅读1分钟

在entgo框架中,Edges是用于建立模型之间关联关系的机制。FromToEdges结构中的两个字段,分别表示关联关系的源模型和目标模型。

  • From字段表示关联关系的源模型,它指定了该关系是从哪个模型开始的。在关系图中,源模型是关系的起点。
  • To字段表示关联关系的目标模型,它指定了该关系指向的模型。在关系图中,目标模型是关系的终点。

举个例子,假设我们有两个模型:UserPost,并且我们想要建立一个关系,表示每个用户可以发布多个帖子。我们可以使用Edges来定义这种关系:

type User struct {
    ent.Schema
}

func (User) Edges() []ent.Edge {
    return []ent.Edge{
        edge.To("posts", Post.Type),
    }
}

type Post struct {
    ent.Schema
}

func (Post) Edges() []ent.Edge {
    return []ent.Edge{
        edge.From("author", User.Type).
            Ref("posts").
            Unique(),
    }
}

在上面的例子中,User模型是关系的源模型,Post模型是关系的目标模型。User模型的Edges方法返回一个To边,表示一个用户可以拥有多个帖子。Post模型的Edges方法返回一个From边,表示一个帖子是由一个用户发布的。在这个关系中,我们可以通过author字段从Post模型反向访问到User模型,而通过posts字段从User模型访问到其发布的所有帖子。

通过这种方式,FromTo字段帮助我们定义和描述模型之间的关联关系。