热门标签 | 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/


推荐阅读
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 都说Python处理速度慢,为何月活7亿的 Instagram依然在使用Python?
    点击“Python编程与实战”,选择“置顶公众号”第一时间获取Python技术干货!来自|简书作者|我爱学python链接|https:www.jian ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 3年半巨亏242亿!商汤高估了深度学习,下错了棋?
    转自:新智元三年半研发开支近70亿,累计亏损242亿。AI这门生意好像越来越不好做了。近日,商汤科技已向港交所递交IPO申请。招股书显示& ... [详细]
  • Imdevelopinganappwhichneedstogetmusicfilebystreamingforplayinglive.我正在开发一个应用程序,需要通过流 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了Flutter添加APP启动StoryView相关的知识,希望对你有一定的参考价值。 ... [详细]
  • JavaScript和Python是用于构建各种应用程序的两种有影响力的编程语言。尽管JavaScript多年来一直是占主导地位的编程语言,但Python的迅猛发展有 ... [详细]
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社区 版权所有