Det verkar som att du vill göra två saker med det du har:(1) uppdatera modellen så att du har rätt relationsbindning och (2) använd .Preload()
metod om du försöker få den att associera data vid läsning.
Modelländringar
Gorm härleder automatiskt relationer baserat på namnet på attributen i din struktur och namnet på den refererade strukturen. Problemet är att Google
attribut av typen GoogleAccount
associerar inte eftersom gorm letar efter en type Google struct
.
Du saknar också en främmande nyckel på GoogleAccount
. Hur skulle ORM veta vilket GoogleAccount
att associera med vilken Client
? Du bör lägga till ett ClientId
till ditt GoogleAccount
strukturdefinition.
Jag skulle också ändra de primärnycklar du använder för att skriva uint
eftersom det är vad gorm använder som standard (om du inte har en bra anledning att inte använda det)
Om jag var du skulle jag ändra mina strukturdefinitioner till följande:
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
}
För mer information om detta, ta en titt på föreningens dokumentation här:http://gorm. io/associations.html#has-one
Förladdning av associationer
Nu när du faktiskt har dem korrekt relaterade kan du .Preload()
hämta det kapslade objekt du vill ha:
db.Preload("GoogleAccount").First(&user)
Använder .Preload()
kommer att fylla i user.GoogleAccount
attribut med det korrekt associerade GoogleAccount
baserat på ClientId
.
För mer information om detta, ta en titt på förladdningsdokumentationen:http://gorm .io/crud.html#preloading-eager-loading