Maison > développement back-end > Golang > Comment puis-je interroger efficacement des lieux et leurs villes associées à l'aide de GORM dans Go ?

Comment puis-je interroger efficacement des lieux et leurs villes associées à l'aide de GORM dans Go ?

Mary-Kate Olsen
Libérer: 2024-12-09 00:09:10
original
981 Les gens l'ont consulté

How Can I Efficiently Query Places and Their Associated Towns Using GORM in Go?

Associations GORM Golang ORM : interrogation de lieux avec des villes associées

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.

Le problème

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
}
Copier après la connexion

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.

La solution

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
}
Copier après la connexion

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)
}
Copier après la connexion

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)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal