首页 > 其他分享 >一对一关系

一对一关系

时间:2024-01-24 10:45:15浏览次数:28  
标签:关系 string 一对一 User 添加 uint user UserInfo

一对一关系

一对一关系比较少,一般用于表的扩展

例如一张用户表,有很多字段

那么就可以把它拆分为两张表,常用的字段放主表,不常用的字段放详情表

表结构搭建

type User struct {
  ID       uint
  Name     string
  Age      int
  Gender   bool
  UserInfo UserInfo // 通过UserInfo可以拿到用户详情信息
}

type UserInfo struct {
  UserID uint // 外键
  ID     uint
  Addr   string
  Like   string
}

添加记录

添加用户,自动添加用户详情

DB.Create(&User{
  Name:   "枫枫",
  Age:    21,
  Gender: true,
  UserInfo: UserInfo{
    Addr: "湖南省",
    Like: "写代码",
  },
})

添加用户详情,关联已有用户

这个场景特别适合网站的注册,以及后续信息完善

刚开始注册的时候,只需要填写很基本的信息,这就是添加主表的一条记录

注册进去之后,去个人中心,添加头像,修改地址...

这就是添加附表

DB.Create(&UserInfo{
  UserID: 2,
  Addr:   "南京市",
  Like:   "吃饭",
})

当然,也可以直接把用户对象传递进来

我们需要改一下表结构

type User struct {
  ID       uint
  Name     string
  Age      int
  Gender   bool
  UserInfo UserInfo // 通过UserInfo可以拿到用户详情信息
}

type UserInfo struct {
  User *User  // 要改成指针,不然就嵌套引用了
  UserID uint // 外键
  ID     uint
  Addr   string
  Like   string
}

不限于重新迁移,直接添加即可

var user User
DB.Take(&user, 2)
DB.Create(&UserInfo{
  User: &user,
  Addr: "南京市",
  Like: "吃饭",
})

查询

一般是通过主表查副表

var user User
DB.Preload("UserInfo").Take(&user)
fmt.Println(user)

标签:关系,string,一对一,User,添加,uint,user,UserInfo
From: https://www.cnblogs.com/chunyouqudongwuyuan/p/17984103

相关文章

  • DStream与RDD关系
    RDD是怎么生成的?RDD依靠什么生成?根据DStream来的RDD生成的依据是什么?SparkStreaming中RDD的执行是否和SparkCore中的RDD执行有所不同?运行之后我们对RDD怎么处理?ForEachDStream不一定会触发Job的执行,但是它一定会触发job的产生,和Job是否执行没有关系;问:RDD依靠什么生成的? ......
  • SQL构建表层次关系,递归累加数据
     构建表的上下级关系      有一个需求,表中数据没有关系,如同一个类型的,有多个出库时间。代码--构建表的上下级关系--可以对同一个产品的,有层次关系--使用ROW_NUMBER(),来构建,最上上一级为0INSERTINTOStock([no]--编号,[quantity]......
  • 一篇简短的文章把C++左右值关系讲的透透彻彻
     目录前言C++左值和右值二、右值引用二、右值引用 前言对于C++的左值和右值相信很多人都没有一个很透彻的了解,之前我也是不懂的时候查阅了好多文章,但是讲完我还是一头雾水,直到我遇到一篇宝藏文章,讲的左值右值的关系以及Move函数的用法是相当的清楚,文章链接......
  • Linux系统文件属性按列划分以及各个字段的关系及作用
    按列划分s-li#-i显示inode号码33575030-rw-r--r--1rootroot881Mar609:151.log1.第一列:33575030inode号码2.第二列:-文件类型3.第三列:rw-r--r--九位文件权限rwx4.第四列:1文件的硬链接个数5.第五列:root文件......
  • 鸿蒙原生应用/元服务实战-AGC中几个菜单栏的关系
    大家是否清楚AGC这几个菜单栏的相互关系?我的元服务:点击后跳转到“我的应用”列表中的“HarmonyOS”页签,并且过滤出元服务。开发者可以在此模块中管理和运营元服务,例如创建元服务、发布元服务等。我的应用:开发者可以在此模块中管理和运营应用,例如创建应用、配置应用信息、发布应用、......
  • 进程线程关系
    1、什么是进程什么是进程呢?进程是程序的一次启动执行。什么是程序呢?程序是存放在硬盘中的可执行文件,主要包括代码指令和数据。一个进程是一个程序的一次启动和执行,是操作系统将程序装入内存,给程序分配必要的系统资源,并且开始运行程序的指令。进程与程序是什么关系呢?同一......
  • Python、Anaconda、PyCharm和终端的关系及其作用
    Python是一种高级编程语言,广泛应用于数据分析、科学计算、Web开发等领域。为了便于开发和运行Python程序,我们通常会使用一些工具和环境。其中,Anaconda是一个Python发行版,提供了大量的科学计算和数据处理库;PyCharm是一款强大的Python集成开发环境(IDE);终端(或命令行)则是执行Python代码......
  • MySQL的聚簇索引,非聚簇索引,主键索引,唯一索引和普通索引关系
    关系简述MySQL聚簇索引只有一个,优先primarykey,没有就是uniquekey,两个都没有,innoDB自动生成GEN_CLUST_INDEX。唯一索引有可能是非聚簇的,也有可能聚簇的。唯一索引能建多个,是非聚簇的,也能为空,能多个都是空,但是不能重复。和普通索引区别在于不能重复。如果建立了主键索引,那么......
  • IntelliJ IDEA快速查询maven依赖关系
    IntelliJIDEA快速查询maven依赖关系1.在Maven窗口中点击Dependencies->showDependencies2.得到依赖关系图此时原有快捷键Ctrl+f可以查询jar包,如果没有查询菜单出来则设置快捷键方式为File->Settings->Keymap->搜索栏输入find->在MainMenu下Edit下Find下Find双击算则Ad......
  • 【论文笔记#2】Farseg++:用于高空间分辨率遥感图像地理空间对象分割的前景感知关系网络
    论文来源IEEETransactionsonPatternAnalysisandMachineIntelligence作者ZhuoZheng;YanfeiZhong;JunjueWang等发表年代2023使用方法多分支金字塔编码、前景-场景关系、前景感知解码、前景感知优化期刊层次CCFA;计算机科学1区;IF23.6原文链接......