我有以下层次结构,用户 -> 地图 -> 元素 -> 帖子 一个用户可以有一堆地图,每个地图都有一些元素,每个元素都有一些帖子。
输入用户结构{
UserID uint `gorm:"primarykey;autoIncrement;not_null"`
UserName string `json: user_name`
FirstName string `json: first_name`
LastName string `json: last_name`
Email string `json:email`
Password []byte `json:"-"`
Phone string `json:"phone"`
Maps []Map `gorm:"-"`
}
类型地图结构{
MapID uint `gorm:"primarykey;autoIncrement;not_null"`
UserID uint `json:userid`
User User `json:"user"; gorm:"foreignkey:UserID`
Title string `json:title`
Desc string `json: "desc"`
Elements []Element `gorm:"foreignKey:MapID"`
Date time.Time `json: date`
}
类型元素结构{
ElementID uint `gorm:"primarykey;autoIncrement;not_null"`
ElementName string `json: element_name`
Desc string `json: desc`
MapID uint `json:mapid`
Map Map `json:"map"; gorm:"foreignkey:MapID`
Posts []Post `gorm:"foreignKey:ElementID"`
Date time.Time `json: date`
UserID uint `json:userid`
User User `json:"user"; gorm:"foreignkey:UserID`
}
输入 Post 结构 {
PostId uint `gorm:"primarykey;autoIncrement;not_null"`
Title string `json: p_title`
Subject string `json: subject`
Date time.Time `json: date`
Entry string `json: entry_text`
ElementID uint `json:elementid`
Element Element `json:"element"; gorm:"foreignkey:ElementID`
UserID uint `json:userid`
User User `json:"user"; gorm:"foreignkey:UserID`
}
这一切似乎工作正常,但现在当我从后端发送 JSON 响应时,似乎有可能出现无限循环。
当我检索所有用户的地图时,它会列出与创建地图的用户相关的用户对象,但地图随后还包含一个元素列表,并且在元素对象中它将列出它所属的地图和该地图对象将再次列出它的所有元素。
那么我应该通过在一个方向上预加载层次结构来处理这个问题吗?
var getmaps []models.Map database.DB.Preload("User").Preload("Map").Preload("Elements").Offset(偏移).Limit(限制).Find(&getmaps)
或者我应该修复 struct 和 gorm 设置以仅在一个方向上获得关系?因为返回一个地图将返回它的元素,每个元素将返回它所属的地图,循环回到它的元素等。
这个循环也会发生在元素和帖子中,其中一个元素将有很多帖子,这些帖子对象将显示其元素,而该元素对象将显示其帖子。
我确信有一种理想或最佳的方式来实现这一点,所以只是好奇人们会推荐什么。
白板的微信
相关分类