Dans GORM for Go, il est possible de définir des relations entre modèles, telles que la relation entre les villes et les lieux. Lors de l'interrogation de lieux, il est souvent souhaitable de récupérer également les informations sur la ville associée.
Considérez les structures suivantes représentant les villes et les lieux :
type Place struct { ID int Name string Town Town } type Town struct { ID int Name string }
Avec un base de données simple contenant deux villes et deux lieux liés à l'une des villes, l'interrogation de tous les lieux peut ne pas donner les résultats escomptés. Au lieu de récupérer des lieux avec leurs informations de ville associées, vous pouvez recevoir un tableau de lieux avec des champs de ville vides.
Pour interroger correctement les lieux et leurs informations de ville associées, le TownID doit être spécifié comme clé étrangère dans la structure Place :
type Place struct { ID int Name string TownID int Town Town }
Plusieurs approches peuvent être adoptées pour gérer le interrogation :
Approche 1 : Utilisation de la méthode Related()
places := []Place{} db.Find(&places) for i, _ := range places { db.Model(places[i]).Related(&places[i].Town) }
Cette approche déclenche une requête supplémentaire pour chaque lieu pour récupérer la ville associée, ce qui donne un n 1 problème.
Approche 2 :Utilisation Préchargements
L'approche privilégiée consiste à utiliser des préchargements, ce qui permet d'interroger efficacement les modèles associés.
db.Preload("Town").Find(&places)
Cette approche ne déclenche que deux requêtes : une pour récupérer tous les lieux et une pour récupérer tous villes associées.
En utilisant cette approche, la requête renverra le résultat attendu, où chaque objet lieu contient les informations sur la ville associée.
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!