GORM v1 和 v2区别
一定要区分好,不然会导致相关功能无法使用
GORM v1
项目:https://github.com/jinzhu/gorm
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;
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;
测试数据
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)
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)