Maison >développement back-end >Golang >Comment SQLx peut-il gérer efficacement l'analyse de structures imbriquées dans les requêtes de base de données ?

Comment SQLx peut-il gérer efficacement l'analyse de structures imbriquées dans les requêtes de base de données ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-10 11:00:13549parcourir

How Can SQLx Efficiently Handle Nested Struct Scanning in Database Queries?

Analyse de structures imbriquées avec SQLx

Dans le domaine des manipulations de bases de données, l'analyse de structures imbriquées dans des entités de base de données peut poser un défi. Considérons le scénario suivant :

Étant donné le modèle de base de données :

type Customer struct {
   Id      int     `json:"id" db:"id"`
   Name    string  `json:"name" db:"name"`
   Address Address `json:"adress"`
}

type Address struct {
   Street string `json:"street" db:"street"`
   City   string `json:"city" db:"city"`
}

L'énigme :

Tentative de remplissage la structure Customer utilisant le code suivant échoue avec une erreur indiquant que le champ de destination de la rue dans *models.Customer est manquant.

customer := models.Customer{}
err := db.Get(&customer, `select * from users where>

La solution :

SQLx fournit une solution puissante pour analyser les structures imbriquées grâce à l'utilisation de structures intégrées. Au lieu de déclarer l'adresse en tant que champ avec des balises db individuelles, nous pouvons l'intégrer dans Customer :

type Customer struct {
   Id     int    `json:"id" db:"id"`
   Name   string `json:"name" db:"name"`
   Address
}

En intégrant la structure, les champs d'adresse sont promus dans Customer et reçoivent leurs balises db de leur parent. SQLx remplira ensuite ces champs directement à partir du résultat de la requête.

Remarque importante :

Bien que cette approche simplifie l'analyse, elle aplatit également la sortie JSON de la structure. Pour conserver la structure imbriquée d'origine, envisagez de remapper la structure de la base de données sur votre type de cible.

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