热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ent基本使用十四edge

edge在ent中属于比较核心,同时也是功能最强大的,ent提供了比较强大的关系模型快速使用参考图  以上包含了两个通过边定义的关系petsowner:user packagesc

edge 在ent 中属于比较核心,同时也是功能最强大的,ent 提供了比较强大的关系模型

快速使用

  • 参考图
    《ent 基本使用十四 edge》

     

     

以上包含了两个通过边定义的关系
pets/owner:
user

 

package schema

import (

"github.com/facebookincubator/ent"

"github.com/facebookincubator/ent/schema/edge"

)

// User schema.

type User struct {

ent.Schema

}

// Fields of the user.

func (User) Fields() []ent.Field {

return []ent.Field{

// ...

}

}

// Edges of the user.

func (User) Edges() []ent.Edge {

return []ent.Edge{

edge.To("pets", Pet.Type),

}

}

   

pet

package schema

import (

"github.com/facebookincubator/ent"

"github.com/facebookincubator/ent/schema/edge"

)

// User schema.

type Pet struct {

ent.Schema

}

// Fields of the user.

func (Pet) Fields() []ent.Field {

return []ent.Field{

// ...

}

}

// Edges of the user.

func (Pet) Edges() []ent.Edge {

return []ent.Edge{

edge.From("owner", User.Type).

Ref("pets").

Unique(),

}

}

   

说明:
如您所见,一个User实体可以拥有宠物,但是一个Pet实体只能拥有一个人。
在关系定义中,pets边是O2M(一对多)关系,owner边是M2O(多对一)关系。
该User schema 拥有该pets/owner关系,因为它使用edge.To,并且该Pet schema 仅具有使用edge.From该Ref方法声明的对其的反向引用。
该Ref方法描述了User我们要引用的架构的哪个边,因为从一个架构到另一个架构可以有多个引用。
边/关系的基数可以使用该Unique方法进行控制,下面将对其进行更广泛的说明。
users / groups:
group

 

package schema

import (

"github.com/facebookincubator/ent"

"github.com/facebookincubator/ent/schema/edge"

)

// Group schema.

type Group struct {

ent.Schema

}

// Fields of the group.

func (Group) Fields() []ent.Field {

return []ent.Field{

// ...

}

}

// Edges of the group.

func (Group) Edges() []ent.Edge {

return []ent.Edge{

edge.To("users", User.Type),

}

}

   

user

package schema

import (

"github.com/facebookincubator/ent"

"github.com/facebookincubator/ent/schema/edge"

)

// User schema.

type User struct {

ent.Schema

}

// Fields of the user.

func (User) Fields() []ent.Field {

return []ent.Field{

// ...

}

}

// Edges of the user.

func (User) Edges() []ent.Edge {

return []ent.Edge{

edge.From("groups", Group.Type).

Ref("users"),

// "pets" declared in the example above.

edge.To("pets", Pet.Type),

}

}

 

说明:
可以看到,一个组实体可以有许多用户,一个用户实体可以有许多组。
在关系定义中,users边是M2M(多对多)关系,groups 边也是M2M(多对多)关系

To && From

edge.To和edge.From是用于创建边/关系的2个构建器。
使用edge.To构建器定义边的模式拥有该关系,与使用edge.From仅为该关系提供后向引用(使用不同名称)的构建器不同

说明

关于详细的o2o 以及M2M o2M 使用以及关系的方向可以参考官方文档

参考资料

https://entgo.io/docs/schema-edges/


推荐阅读
author-avatar
小蚊子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有