Sembra che tu voglia fare due cose con quello che hai:(1) aggiorna il modello in modo da avere il giusto legame di relazione e (2) usa il .Preload()
metodo se stai cercando di farlo associare i dati in lettura.
Modifiche al modello
Gorm deduce automaticamente le relazioni in base al nome degli attributi nella tua struttura e al nome della struttura di riferimento. Il problema è che Google
attributo di tipo GoogleAccount
non si sta associando perché Gorm sta cercando una type Google struct
.
Ti manca anche una chiave esterna su GoogleAccount
. Come farebbe l'ORM a sapere quale GoogleAccount
associare a quale Client
? Dovresti aggiungere un ClientId
al tuo GoogleAccount
definizione della struttura.
Inoltre, cambierei le chiavi primarie che stai utilizzando per digitare uint
dal momento che è ciò che Gorm è predefinito (a meno che tu non abbia una buona ragione per non usarlo)
Se fossi in te, cambierei le mie definizioni di struct come segue:
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
}
Per ulteriori informazioni al riguardo, dai un'occhiata alla documentazione delle associazioni qui:http://gorm. io/associations.html#ha-uno
Precaricamento delle associazioni
Ora che li hai effettivamente correlati correttamente, puoi .Preload()
ottieni l'oggetto annidato che desideri:
db.Preload("GoogleAccount").First(&user)
Usando .Preload()
popolerà l'user.GoogleAccount
attributo con il GoogleAccount
correttamente associato in base a ClientId
.
Per ulteriori informazioni al riguardo, dai un'occhiata alla documentazione di precaricamento:http://gorm .io/crud.html#preloading-eager-loading