需求
三个表 article,article_user,user
article和article_user 是一对多
article_user 和 user 是一对一
查询一条 article的记录的时候,需要同时将 user的数据也带过来
{
"id": 1,
"article_users": [
{
"id": 100,
"user_id": 10,
"user": {
"id": 10,
"user_name": "XXX"
}
}
]
}
结构体定义
type Article struct {
Id int `json:"id"`
ArticleUsers []ArticleUser `json:"article_users"`
}
type ArticleUser struct {
Id int `json:"id"`
UserId int `json:"user_id"`
User User `json:"user" gorm:"foreignKey:id;AssociationForeignKey:user_id"`
}
type ArticleUser struct {
Id int `json:"id"`
UserName string `json:"user_name"`
}
查询gorm
var model models.Article
err = GetDB().Model(&models.Article{}).Where(id).Preload("ArticleUsers").Preload("ArticleUsers.User").Find(&model).Error
关键点
- Preload
- gorm的关键词 需要
foreignKey指定外部ID,AssociationForeignKey指定关联的本ID - 在Preload中可以使用点号进行指定
ArticleUsers.User
Golang GORM预加载关联查询:多表联合获取数据
本文介绍如何使用GORM在Golang中进行预加载查询,以获取article、article_user和user三张表的数据。通过一对多和一对一的关系,详细解析了结构体定义和查询的关键点,特别是Preload方法的使用,强调了需要指定外部ID和关联的本ID。
2316

被折叠的 条评论
为什么被折叠?



