写点什么

gorm mysql 表关联的一个例子

用户头像
werben
关注
发布于: 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
用户头像

werben

关注

还未添加个人签名 2018.01.08 加入

还未添加个人简介

评论

发布
暂无评论
gorm mysql表关联的一个例子