gorm mysql 表关联的一个例子
发布于: 2021 年 03 月 31 日
gorm mysql 表关联的一个例子。
一个 class 对应多个 user
一个 class 对应多个 teacher
通过 user 查出 class,以及 class 下所有的 teacher
package main
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"log"
)
type User struct {
Id int `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
ClazzId int `json:"clazz_id"`
Clazz Clazz `gorm:"foreignKey:ClazzId"`
CreateAt int `json:"create_at"`
}
type Teacher struct {
Id int `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
ClazzId int `json:"clazz_id"`
CreateAt int `json:"create_at"`
}
type Clazz struct {
Id int `json:"id"`
Name string `json:"name"`
Number int `json:"number"`
CreateAt int `json:"create_at"`
Teachers []Teacher `gorm:"FOREIGNKEY:ClazzId"`
}
func main() {
dsn := "root:aimore123456@tcp(218.91.230.203:23306)/test?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if nil != err {
log.Fatal(err)
}
var user User
if err := db.Preload("Clazz").Preload("Clazz.Teachers").Where("id = ?", 1).First(&user).Error; nil != err {
fmt.Printf("err:%v\n", err)
} else {
fmt.Printf("user:%+v\n", user)
}
}
复制代码
数据结构如下
CREATE TABLE `clazzs` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(256) NOT NULL,
`number` int NOT NULL,
`create_at` int NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `teachers` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(64) NOT NULL,
`age` int NOT NULL,
`clazz_id` int NOT NULL,
`craete_at` int NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `users` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(256) NOT NULL,
`age` int DEFAULT '0',
`create_at` int NOT NULL,
`clazz_id` int NOT NULL,
PRIMARY KEY (`id`)
);
复制代码
划线
评论
复制
发布于: 2021 年 03 月 31 日阅读数: 9
版权声明: 本文为 InfoQ 作者【werben】的原创文章。
原文链接:【http://xie.infoq.cn/article/4b437de7cfe27173cf242c824】。文章转载请联系作者。
werben
关注
还未添加个人签名 2018.01.08 加入
还未添加个人简介
评论