返回顶部
首页 > 资讯 > 后端开发 > GO >golang gorm的关系关联实现示例
  • 969
分享到

golang gorm的关系关联实现示例

2024-04-02 19:04:59 969人浏览 薄情痞子
摘要

目录1. 关联1.1. 属于1.2. 包含一个1.3. 包含多个1.4. 多对多1.5. 多种包含1.6. 关联模式1. 关联 1.1. 属于 // `User`属于`Profile

1. 关联

1.1. 属于

// `User`属于`Profile`, `ProfileID`为外键
type User struct {
  gORM.Model
  Profile   Profile
  ProfileID int
}
type Profile struct {
  Gorm.Model
  Name string
}
db.Model(&user).Related(&profile)
//// SELECT * FROM profiles WHERE id = 111; // 111是user的外键ProfileID

指定外键

type Profile struct {
    gorm.Model
    Name string
}
type User struct {
    gorm.Model
    Profile      Profile `gorm:"ForeignKey:ProfileRefer"` // 使用ProfileRefer作为外键
    ProfileRefer int
}

指定外键和关联外键

type Profile struct {
    gorm.Model
    Refer string
    Name  string
}
type User struct {
    gorm.Model
    Profile   Profile `gorm:"ForeignKey:ProfileID;AssociationForeignKey:Refer"`
    ProfileID int
}

1.2. 包含一个

// User 包含一个 CreditCard, UserID 为外键
type User struct {
    gorm.Model
    CreditCard   CreditCard
}
type CreditCard struct {
    gorm.Model
    UserID   uint
    Number   string
}
var card CreditCard
db.Model(&user).Related(&card, "CreditCard")
//// SELECT * FROM credit_cards WHERE user_id = 123; // 123 is user's primary key
// CreditCard是user的字段名称,这意味着获得user的CreditCard关系并将其填充到变量
// 如果字段名与变量的类型名相同,如上例所示,可以省略,如:
db.Model(&user).Related(&card)

指定外键

type Profile struct {
  gorm.Model
  Name      string
  UserRefer uint
}
type User struct {
  gorm.Model
  Profile Profile `gorm:"ForeignKey:UserRefer"`
}

指定外键和关联外键

type Profile struct {
  gorm.Model
  Name   string
  UserID uint
}
type User struct {
  gorm.Model
  Refer   string
  Profile Profile `gorm:"ForeignKey:UserID;AssociationForeignKey:Refer"`
}

1.3. 包含多个

// User 包含多个 emails, UserID 为外键
type User struct {
    gorm.Model
    Emails   []Email
}
type Email struct {
    gorm.Model
    Email   string
    UserID  uint
}
db.Model(&user).Related(&emails)
//// SELECT * FROM emails WHERE user_id = 111; // 111 是 user 的主键

指定外键

type Profile struct {
  gorm.Model
  Name      string
  UserRefer uint
}
type User struct {
  gorm.Model
  Profiles []Profile `gorm:"ForeignKey:UserRefer"`
}

指定外键和关联外键

type Profile struct {
  gorm.Model
  Name   string
  UserID uint
}
type User struct {
  gorm.Model
  Refer   string
  Profiles []Profile `gorm:"ForeignKey:UserID;AssociationForeignKey:Refer"`
}

1.4. 多对多

// User 包含并属于多个 languages, 使用 `user_languages` 表连接
type User struct {
    gorm.Model
    Languages         []Language `gorm:"many2many:user_languages;"`
}
type Language struct {
    gorm.Model
    Name string
}
db.Model(&user).Related(&languages, "Languages")
//// SELECT * FROM "languages" INNER JOIN "user_languages" ON "user_languages"."language_id" = "languages"."id" WHERE "user_languages"."user_id" = 111

指定外键和关联外键

type CustomizePerson struct {
  IdPerson string             `gorm:"primary_key:true"`
  Accounts []CustomizeAccount `gorm:"many2many:PersonAccount;ForeignKey:IdPerson;AssociationForeignKey:IdAccount"`
}
type CustomizeAccount struct {
  IdAccount string `gorm:"primary_key:true"`
  Name      string
}

译者注:这里设置好像缺失一部分

1.5. 多种包含

支持多种的包含一个和包含多个的关联

type Cat struct {
    Id    int
    Name  string
    Toy   Toy `gorm:"polymorphic:Owner;"`
  }
  type Dog struct {
    Id   int
    Name string
    Toy  Toy `gorm:"polymorphic:Owner;"`
  }
  type Toy struct {
    Id        int
    Name      string
    OwnerId   int
    OwnerType string
  }

注意:多态属性和多对多显式不支持,并且会抛出错误。

1.6. 关联模式

关联模式包含一些帮助方法来处理关系事情很容易。

// 开始关联模式
var user User
db.Model(&user).Association("Languages")
// `user`是源,它需要是一个有效的记录(包含主键)
// `Languages`是关系中源的字段名。
// 如果这些条件不匹配,将返回一个错误,检查它:
// db.Model(&user).Association("Languages").Error
// Query - 查找所有相关关联
db.Model(&user).Association("Languages").Find(&languages)
// Append - 添加新的many2many, has_many关联, 会替换掉当前 has_one, belongs_to关联
db.Model(&user).Association("Languages").Append([]Language{languageZH, languageEN})
db.Model(&user).Association("Languages").Append(Language{Name: "DE"})
// Delete - 删除源和传递的参数之间的关系,不会删除这些参数
db.Model(&user).Association("Languages").Delete([]Language{languageZH, languageEN})
db.Model(&user).Association("Languages").Delete(languageZH, languageEN)
// Replace - 使用新的关联替换当前关联
db.Model(&user).Association("Languages").Replace([]Language{languageZH, languageEN})
db.Model(&user).Association("Languages").Replace(Language{Name: "DE"}, languageEN)
// Count - 返回当前关联的计数
db.Model(&user).Association("Languages").Count()
// Clear - 删除源和当前关联之间的关系,不会删除这些关联
db.Model(&user).Association("Languages").Clear()

以上就是golang gorm的关系关联实现示例的详细内容,更多关于golang gorm的关系关联的资料请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: golang gorm的关系关联实现示例

本文链接: https://lsjlt.com/news/146152.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • golang gorm的关系关联实现示例
    目录1. 关联1.1. 属于1.2. 包含一个1.3. 包含多个1.4. 多对多1.5. 多种包含1.6. 关联模式1. 关联 1.1. 属于 // `User`属于`Profile...
    99+
    2024-04-02
  • Mybatis实现关联关系映射的方法示例
    目录数据库表结构 一、实现Project关联Company一对一关联二、实现Company关联Project一对多关系 三、Mybatis子查询方式实现关联关系查...
    99+
    2024-04-02
  • Android ViewPager与radiogroup实现关联示例
    Android ViewPager与radiogroup实现关联 效果图展示 Android ViewPager与radiogroup实现关联步骤 1.实例化ViewPa...
    99+
    2022-06-06
    radiogroup 示例 viewpager Android
  • Hibernate关联关系怎么实现
    这篇文章主要介绍“Hibernate关联关系怎么实现”,在日常操作中,相信很多人在Hibernate关联关系怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hibernate关联关系怎么实现”的疑惑有所...
    99+
    2023-06-03
  • golang GORM和Gin无法创建具有关联的对象
    问题内容 我使用 GORM 作为 ORM 以及我的 Golang API 来与我的数据库进行通信。 但是对于创建与数据库关联的实体,代码失败了(DB.Create(&data)...
    99+
    2024-02-12
  • golang中gorm操作mysql及gorm的示例分析
    这篇文章给大家分享的是有关golang中gorm操作mysql及gorm的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。golang 官方的那个操作mysql的有点麻烦所以就使用了gorm,下面就gorm...
    99+
    2023-06-15
  • iOS关联对象示例详解
    背景 在iOS开发中如果我们想给一个对象动态添加属性或者给category添加属性的时候,都是通过runtime的关联对象去实现,那我们添加的属性到底是如何存取的呢?是直接添加到了...
    99+
    2022-06-02
    ios 关联 对象
  • MySQL数据库多表关联的示例
    这篇文章将为大家详细讲解有关MySQL数据库多表关联的示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。目录多对一关联多对多关联一对一关联模糊查询表的约束表之间的关联模糊...
    99+
    2024-04-02
  • PHP中关联数组的示例分析
    这篇文章主要为大家展示了“PHP中关联数组的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“PHP中关联数组的示例分析”这篇文章吧。PHP 关联数组关联数...
    99+
    2024-04-02
  • ElementUI嵌套页面及关联增删查改实现示例
    目录前言一、ElementUI如何在原有页面添加另外一个页面并实现关联增删查改?二、实现步骤前言 本文大概内容:例如:随着ElementUI前后端交互的技术的更新,用户的的体验越来越...
    99+
    2024-04-02
  • golang实现网关
    随着互联网技术的发展和应用场景的不断拓展,网络架构越来越复杂,服务之间的相互调用也越来越频繁。为了解决这些问题,网关(gateway)技术应运而生。在这篇文章中,我们将介绍golang实现网关的详细过程。一、网关概述网关作为系统架构中的一个...
    99+
    2023-05-22
  • Vue实现侧边导航栏于Tab页关联的示例代码
    目录技术栈效果分析技术栈 侧边栏用 Antdtab使用element 效果 <template> <div class="main-...
    99+
    2024-04-02
  • golang gorm模型结构体的定义示例
    目录1. 模型1.1. 模型定义2. 约定2.1. gorm.Model 结构体2.2. 表名是结构体名称的复数形式2.3. 更改默认表名2.4. 列名是字段名的蛇形小写2.5. 字...
    99+
    2024-04-02
  • Hinerbate单端关联代理的示例分析
    小编给大家分享一下Hinerbate单端关联代理的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在Hinerbate中,对集合的延迟抓取的采用了自己的实现...
    99+
    2023-06-17
  • elasticsearch索引index之Mapping实现关系结构示例
    目录Mapping的实现关系结构Mapper的三类parse方法部分Field总结Mapping的实现关系结构 Lucene索引的一个特点就filed,索引以field组合。这一特点...
    99+
    2024-04-02
  • MyBatis怎么实现自定义映射关系和关联查询
    本篇内容介绍了“MyBatis怎么实现自定义映射关系和关联查询”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、使用注解实现自定义映射关系当...
    99+
    2023-07-06
  • 如何实现UML中关联、组合与聚合等关系的辨析
    本篇文章为大家展示了如何实现UML中关联、组合与聚合等关系的辨析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。以前学习面向对象的时候,常听到介绍对象之间的各种关系,常见的有关联,组合与聚合。关联:关...
    99+
    2023-06-17
  • golang gorm实现get请求查询案例测试
    目录案例查询班级get请求查询学生get请求案例 package main import ( _ "github.com/go-sql-driver/mysql" "gi...
    99+
    2024-04-02
  • GO - Gin/Gorm/Postgresql - 创建具有“有一个”关联的外键
    php小编草莓为您介绍GO语言中使用Gin、Gorm和PostgreSQL创建具有"有一个"关联的外键的方法。在开发过程中,我们经常会遇到需要建立表之间关联关系的情况。有时候,我们需要...
    99+
    2024-02-09
    go语言
  • Entity Framework 4.0自关联建模的示例分析
    这篇文章主要介绍了Entity Framework 4.0自关联建模的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。针对这个表建立自关联,详细截图如下Children...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作