PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Obtenir un objet imbriqué dans la structure de gorm

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