Det ser ud til, at du vil gøre to ting med det, du har:(1) opdatere modellen, så du har den rigtige relationsbinding, og (2) brug .Preload()
metode, hvis du forsøger at få den til at knytte dataene ved læsning.
Modelændringer
Gorm udleder automatisk relationer baseret på navnet på attributterne i din struktur og navnet på den refererede struktur. Problemet er, at Google
attribut af typen GoogleAccount
forbinder ikke, fordi gorm leder efter en type Google struct
.
Du mangler også en fremmednøgle på GoogleAccount
. Hvordan ville ORM'en vide, hvilken GoogleAccount
at associere med hvilken Client
? Du skal tilføje et ClientId
til din GoogleAccount
strukturdefinition.
Jeg ville også ændre de primære nøgler, du bruger, til at skrive uint
da det er det, gorm er standard til (medmindre du har en god grund til ikke at bruge det)
Hvis jeg var dig, ville jeg ændre mine strukturdefinitioner til følgende:
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
}
For mere information om dette, tag et kig på foreningens dokumentation her:http://gorm. io/associations.html#has-one
Forudindlæser tilknytninger
Nu hvor du faktisk har dem korrekt relateret, kan du .Preload()
få det indlejrede objekt, du ønsker:
db.Preload("GoogleAccount").First(&user)
Brug af .Preload()
vil udfylde user.GoogleAccount
attribut med den korrekt tilknyttede GoogleAccount
baseret på ClientId
.
For mere information om dette, tag et kig på forhåndsindlæsningsdokumentationen:http://gorm .io/crud.html#preloading-eager-loading