1 回答
TA贡献1883条经验 获得超3个赞
在您的Post,Map和Element结构中,您具有以下字段:
UserID uint `json:userid`
User User `json:"user"; gorm:"foreignkey:UserID`
您应该User从内容结构中删除该字段,因为您已经有一个UserID. 在这种情况下,“引用”(ID) 比包括整个用户对象更明智。如果需要,客户端可以调用/users/{id}端点并查找更多信息。
还User通过删除限制结构的内容Maps []Map(负责您提到的循环)。然后您需要设置端点,/user/{id}/maps以便客户端可以获取用户的内容。
这同样适用于Post和Element。您可以全力以赴只存储 ID,也可以只存储一组“子”模型。(地图嵌入元素,元素不嵌入地图)。因此,要查找元素的关联映射,您可以调用 endpoint /maps/{your element's map ID}。Element > Post 相同
type Map struct {
gorm.Model // this takes care of the ID field
UserID uint `json:userid`
Title string `json:title`
Desc string `json: "desc"`
Elements []Element // gorm will handle the relationship automatically
Date time.Time `json: date`
}
type Element struct {
gorm.Model // includes ID
ElementName string `json: element_name`
Desc string `json: desc`
MapID uint `json:mapid`
// Map Map ... This relationship is described by another endpoint - /elements/{elementId}/map to get the related map
Posts []Post // gorm handles this
Date time.Time `json: date`
UserID uint `json:userid`
}
type Post struct {
gorm.Model
Title string `json: p_title`
Subject string `json: subject`
Date time.Time `json: date`
Entry string `json: entry_text`
ElementID uint `json:elementid` // gorm will use this as fk
UserID uint `json:userid`
}
为避免循环,您需要在结构级别使关系成为单向的,并设置更多的 http 路由以朝另一个方向发展(请参阅注释代码)。
我描述的是一个简单的 REST api。微软有一个很好的概述:https ://learn.microsoft.com/en-us/azure/architecture/best-practices/api-design#organize-the-api-design-around-resources - 特别是客户/订单关系你会感兴趣的。
在 gorm 方面,您将使用一对多关联:https ://gorm.io/docs/has_many.html
- 1 回答
- 0 关注
- 73 浏览
添加回答
举报