Het lijkt erop dat je twee dingen wilt doen met wat je hebt:(1) het model bijwerken zodat je de juiste relatiebinding hebt, en (2) de .Preload()
gebruiken methode als u probeert om het de gegevens bij het lezen te laten associëren.
Modelwijzigingen
Gorm leidt automatisch relaties af op basis van de naam van de attributen in uw struct en de naam van de struct waarnaar wordt verwezen. Het probleem is dat Google
kenmerk van het type GoogleAccount
koppelt niet omdat gorm op zoek is naar een type Google struct
.
U mist ook een externe sleutel op GoogleAccount
. Hoe weet de ORM welke GoogleAccount
om te associëren met welke Client
? U moet een ClientId
. toevoegen naar uw GoogleAccount
structuurdefinitie.
Ik zou ook de primaire sleutels die u gebruikt om uint
te typen, wijzigen want dat is waar Gorm standaard op ingesteld is (tenzij je een goede reden hebt om het niet te gebruiken)
Als ik jou was, zou ik mijn structuurdefinities als volgt wijzigen:
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
}
Voor meer informatie hierover, bekijk hier de associatiedocumentatie:http://gorm. io/associations.html#has-one
Associaties vooraf laden
Nu je ze echt goed gerelateerd hebt, kun je .Preload()
verkrijg het geneste object dat u wilt:
db.Preload("GoogleAccount").First(&user)
Met behulp van .Preload()
vult de user.GoogleAccount
attribuut met het correct gekoppelde GoogleAccount
gebaseerd op de ClientId
.
Voor meer informatie hierover, bekijk de preloading documentatie:http://gorm .io/crud.html#preloading-eager-loading