Maison >développement back-end >Golang >Comment récupérer efficacement les données associées dans la relation lieu-ville de GORM ?

Comment récupérer efficacement les données associées dans la relation lieu-ville de GORM ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-18 13:40:11885parcourir

How to Efficiently Fetch Associated Data in GORM's Place-Town Relationship?

Associations ORM GORM Golang : récupération des champs associés

Dans GORM, un ORM puissant pour Go, vous pouvez créer des associations entre des structures représentant des tables de base de données. Dans ce scénario, vous disposez d'une structure Place associée à une structure Town, où chaque Place appartient à une Ville.

Votre code récupère actuellement tous les enregistrements Place, mais vous souhaitez inclure les informations sur la Ville associées à chaque Place. L'erreur dans votre requête est que la clé étrangère TownID n'est pas spécifiée dans la structure Place.

Pour résoudre ce problème, modifiez la structure Place :

type Place struct {
  ID          int
  Name        string
  TownID      int // The foreign key
  Town        Town
}

Maintenant, vous disposez de plusieurs options pour récupérer les données de Ville associées :

Option 1 : Chargement manuel (non recommandé)

Itérer sur chaque lieu et chargez manuellement la ville associée à l'aide du modèle.Connexe :

places := []Place{}
db.Find(&places)
for i, _ := range places {
    db.Model(places[i]).Related(&places[i].Town)
}

Cette approche, tout en produisant le résultat attendu, souffre du problème "N 1", où plusieurs requêtes de base de données sont émises pour chaque lieu .

Option 2 : Préchargement (recommandé)

Utilisez la fonction Précharger pour charger avec impatience le fichier associé Ville lors de la récupération des enregistrements de lieux :

db.Preload("Town").Find(&places)

Cela déclenchera seulement deux requêtes : une pour récupérer tous les lieux et une pour récupérer toutes les villes associées. Il s'adapte bien au nombre de lieux et de villes.

Résultat attendu :

[{1 Place1  {1 Town1} 1} {2 Place2  {1 Town1} 1}]

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn