GORM v2 一对一关联查询使用(Belongs To 、Has One)

简介: GORM v2 一对一关联查询使用(Belongs To 、Has One)

GORM v1 和 v2区别


一定要区分好,不然会导致相关功能无法使用

GORM v1


项目:https://github.com/jinzhu/gorm

文档:https://gorm.io/docs/

GORM v2


项目:https://github.com/go-gorm/gorm

文档:GORM Guides | GORM - The fantastic ORM library for Golang, aims to be developer friendly.

前言


说明:一个学生(students)拥有一条信息(information);相应的,一条信息(information)属于对应的一个学生(students)

表结构


students表


CREATE TABLE `students` (
    `id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
    `name` VARCHAR ( 64 ) DEFAULT NULL,
    PRIMARY KEY ( `id` )
) ENGINE = MyISAM AUTO_INCREMENT = 2 DEFAULT CHARSET = utf8mb4;

image.png

information表


CREATE TABLE `information` (
   `id` INT ( 11 ) NOT NULL AUTO_INCREMENT COMMENT '信息表',
   `student_id` INT ( 11 ) DEFAULT NULL,
   `sex` TINYINT ( 1 ) DEFAULT NULL,
   `age` INT ( 4 ) DEFAULT NULL,
   `hometown` VARCHAR ( 128 ) DEFAULT NULL,
   PRIMARY KEY ( `id` )
) ENGINE = MyISAM AUTO_INCREMENT = 3 DEFAULT CHARSET = utf8mb4;

image.png

测试数据


image.png

Belong To


说明:一条信息属于一个学生,信息是查询主体

student模型


package models
type Student struct {
  ID int64 `gorm:"primary_key"`
  Name string
}

information模型


package models
type Information struct {
  ID int64 `gorm:"primary_key"`
  StudentID int64
  Sex uint8
  Age uint8
  HT string `gorm:"column:hometown"`
  Student Student `gorm:"foreignKey:student_id"`
}

执行查询


information := new (models.Information)
db.Preload("Student").First(&information)
// db.Joins("Student").First(&information)
fmt.Println(information)

image.png

Has One


说明:学生有一条信息,学生是查询主体

student模型


package models
type Student struct {
  ID int64 `gorm:"primary_key"`
  Name string
  Info Information `gorm:"foreignKey:student_id"`
}

information模型


package models
type Information struct {
  ID int64 `gorm:"primary_key"`
  StudentID int64
  Sex uint8
  Age uint8
  HT string `gorm:"column:hometown"`
}

执行查询


student := new (models.Student)
db.Preload("Info").First(&student)
// db.Joins("Info").First(&student)
fmt.Println(student)

image.png

目录
相关文章
|
3月前
|
SQL 数据库 索引
gorm普通的增删改查
gorm普通的增删改查
55 0
|
3月前
|
SQL 数据库
GORM—查
GORM—查
40 0
|
3月前
|
SQL 数据库
GORM—增
GORM—增
36 0
|
10月前
|
SQL 安全 数据库
GORM V2 写操作
GORM V2 写操作
38 0
|
SQL 测试技术 API
Django不通过外键实现多表关联查询
Django不通过外键实现多表关联查询
388 0
|
SQL 数据库
SQL 多表联合查询的几种方式
SQL 多表联合查询的几种方式
SQL 多表联合查询的几种方式
|
SQL
gorm批量插入解决方案
gorm批量插入解决方案
988 0
gorm批量插入解决方案
|
SQL 算法 数据库
SQL关系模型之主键
引入 上期我们介绍了关系模型和关系数据库,那么这个“关系”到底是由谁来决定的呢?难道我处理数据的时候还要看某个值原本的意义吗? 笔者认为一般来说,数据库的使用者应当对数据有一定的认知,但是如果所谓的数据关系是靠使用者的理解来自行定义,恐怕有失严谨。 毕竟换个人操作,理解就有可能不一样嘛,那关系数据库各个表的关系就随之变化了?显然不现实。 事实上,我们的关系数据库中,关系是由“主键”和“外键”来维护的。今天我们就主要来看看主键——
|
SQL 数据库
快速入门GORM,使用GORM进行CURD
1.模型使用 约定:GORM 倾向于约定,而不是配置。默认情况下,GORM 使用 ID 作为主键,使用结构体名的 蛇形复数 作为表名,字段名的 蛇形 作为列名,并使用 CreatedAt、UpdatedAt 字段追踪创建、更新时间 GORM 定义一个 gorm.Model 结构体,其包括字段 ID、CreatedAt、UpdatedAt、DeletedAt
176 0
|
SQL 关系型数据库 MySQL
【GORM】使用GORM连接各种数据库
1.概述 gorm是一个使用Go语言编写的ORM框架。它文档齐全,对开发者友好,支持主流数据库。
906 0