1 回答

TA貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個(gè)贊
在您的Post,Map和Element結(jié)構(gòu)中,您具有以下字段:
UserID uint `json:userid`
User User `json:"user"; gorm:"foreignkey:UserID`
您應(yīng)該User從內(nèi)容結(jié)構(gòu)中刪除該字段,因?yàn)槟呀?jīng)有一個(gè)UserID. 在這種情況下,“引用”(ID) 比包括整個(gè)用戶對(duì)象更明智。如果需要,客戶端可以調(diào)用/users/{id}端點(diǎn)并查找更多信息。
還User通過(guò)刪除限制結(jié)構(gòu)的內(nèi)容Maps []Map(負(fù)責(zé)您提到的循環(huán))。然后您需要設(shè)置端點(diǎn),/user/{id}/maps以便客戶端可以獲取用戶的內(nèi)容。
這同樣適用于Post和Element。您可以全力以赴只存儲(chǔ) ID,也可以只存儲(chǔ)一組“子”模型。(地圖嵌入元素,元素不嵌入地圖)。因此,要查找元素的關(guān)聯(lián)映射,您可以調(diào)用 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`
}
為避免循環(huán),您需要在結(jié)構(gòu)級(jí)別使關(guān)系成為單向的,并設(shè)置更多的 http 路由以朝另一個(gè)方向發(fā)展(請(qǐng)參閱注釋代碼)。
我描述的是一個(gè)簡(jiǎn)單的 REST api。微軟有一個(gè)很好的概述:https ://learn.microsoft.com/en-us/azure/architecture/best-practices/api-design#organize-the-api-design-around-resources - 特別是客戶/訂單關(guān)系你會(huì)感興趣的。
在 gorm 方面,您將使用一對(duì)多關(guān)聯(lián):https ://gorm.io/docs/has_many.html
- 1 回答
- 0 關(guān)注
- 96 瀏覽
添加回答
舉報(bào)