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

目录
相关文章
|
6月前
|
SQL 数据库 索引
gorm普通的增删改查
gorm普通的增删改查
64 0
|
关系型数据库 MySQL
Mysql union 联合查询
Mysql union 联合查询
73 0
|
6月前
|
存储 SQL 关系型数据库
MySQL表的增删改查---多表查询和联合查询
MySQL表的增删改查---多表查询和联合查询
|
6月前
|
SQL 数据库
GORM—查
GORM—查
61 0
|
6月前
|
SQL 数据库
GORM—增
GORM—增
51 0
|
SQL 安全 数据库
GORM V2 写操作
GORM V2 写操作
52 0
|
关系型数据库 MySQL
Mysql join(连接查询) 与 union(联合查询) 的区别
Mysql join(连接查询) 与 union(联合查询) 的区别
187 0
|
SQL 测试技术 API
Django不通过外键实现多表关联查询
Django不通过外键实现多表关联查询
463 0
|
SQL
gorm批量插入解决方案
gorm批量插入解决方案
1049 0
gorm批量插入解决方案
|
SQL 关系型数据库 MySQL
MYSQL中UNION(联合查询)
实际业务中,有时候需要把满足多种独立条件的结果集整合到一起,就可以使用 UNOIN 联合查询。使用 UNION 还是 UNION ALL 其中 UNION 联合查询已经去除了重复的结果集 UNION ALL 联合查询没有去除重复结果集,但是 UNION ALL查询性能要比 UNION好一些。最后还是需要根据具体业务选择使用 UNION 还是 UNION ALL。
171 0
MYSQL中UNION(联合查询)