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:https://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:https://gorm .io/crud.html#preloading-eager-loading