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!