Vypadá to, že s tím, co máte, budete chtít udělat dvě věci:(1) aktualizovat model, abyste měli správnou vazbu vztahu, a (2) použít .Preload()
Pokud se snažíte přimět jej k přiřazení dat při čtení.
Změny modelu
Gorm automaticky odvodí vztahy na základě názvu atributů ve vaší struktuře a názvu odkazované struktury. Problém je v tom, že Google
atribut typu GoogleAccount
nesdružuje, protože gorm hledá type Google struct
.
V účtu GoogleAccount
vám také chybí cizí klíč . Jak by ORM věděl, který GoogleAccount
přiřadit ke kterému Client
? Měli byste přidat ClientId
do vašeho GoogleAccount
definice struktury.
Také bych změnil primární klíče, které používáte pro psaní uint
protože to je výchozí nastavení gorm (pokud nemáte dobrý důvod to nepoužívat)
Být vámi, změnil bych své definice struktur na následující:
type Client struct {
IdClient uint `gorm:"primary_key"`
Name string
PhotoUrl string
ApprovalNumber uint16
Phone string
Password string
HoursOfNotice int8
GoogleAccount GoogleAccount // Change this to `GoogleAccount`, the same name of your struct
}
type GoogleAccount struct {
Id uint
ClientId uint // Foreign key
Token string
}
Další informace o tomto najdete v dokumentaci asociací zde:http://gorm. io/associations.html#has-one
Předběžné načítání přidružení
Nyní, když je skutečně správně souvisí, můžete .Preload()
získejte požadovaný vnořený objekt:
db.Preload("GoogleAccount").First(&user)
Pomocí .Preload()
vyplní user.GoogleAccount
atribut se správně přidruženým GoogleAccount
na základě ClientId
.
Další informace o tomto naleznete v dokumentaci k předběžnému načítání:http://gorm .io/crud.html#preloading-eager-loading