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 加入
还未添加个人简介











评论