Il semble que vous souhaitiez faire deux choses avec ce que vous avez :(1) mettre à jour le modèle afin d'avoir la bonne liaison de relation, et (2) utiliser le .Preload()
si vous essayez de lui faire associer les données lors de la lecture.
Modifications du modèle
Gorm déduit automatiquement les relations en fonction du nom des attributs de votre structure et du nom de la structure référencée. Le problème est que Google
attribut de type GoogleAccount
ne s'associe pas car gorm recherche une type Google struct
.
Il vous manque également une clé étrangère sur GoogleAccount
. Comment l'ORM saurait-il quel GoogleAccount
à associer avec quel Client
? Vous devez ajouter un ClientId
à votre GoogleAccount
définition de structure.
De plus, je changerais les clés primaires que vous utilisez pour taper uint
puisque c'est ce que gorm utilise par défaut (sauf si vous avez une bonne raison de ne pas l'utiliser)
Si j'étais vous, je changerais mes définitions de structure comme suit :
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
}
Pour plus d'informations à ce sujet, consultez la documentation des associations ici :http://gorm. io/associations.html#has-one
Précharger les associations
Maintenant que vous les avez correctement liés, vous pouvez .Preload()
récupérez l'objet imbriqué souhaité :
db.Preload("GoogleAccount").First(&user)
Utilisation de .Preload()
remplira le user.GoogleAccount
attribut avec le GoogleAccount
correctement associé basé sur le ClientId
.
Pour plus d'informations à ce sujet, consultez la documentation de préchargement :http://gorm .io/crud.html#preloading-eager-loading