Lors de l'interrogation de données à l'aide de GORM, vous pouvez rencontrer des problèmes lors de l'analyse des résultats dans une structure de données personnalisée. Cet article explique comment résoudre efficacement ces problèmes.
Considérez le code suivant qui récupère les données de deux tables, utilisateurs et cartes_de_crédit, à l'aide d'une jointure gauche :
<code class="go">type res struct { id int number int user_id int } func getDataJoin() { new := []res{} db.Db.Table("users").Select("users.id as id, credit_cards.number as number, credit_cards.user_id as user_id").Joins("left join credit_cards on credit_cards.user_id = users.id").Scan(&new) fmt.Println("user\n", new) }</code>
Cette requête génère le résultat suivant :
[ {0 0 0}, {0 0 0}, {0 0 0}, {0 0 0}, {0 0 0}, {0 0 0} ]
Malgré l'obtention du résultat de requête correct dans la base de données, le nouveau tableau est constitué uniquement de valeurs par défaut.
Pour résoudre ce problème, assurez-vous que les noms de champs dans la structure res s'alignent avec les noms de colonnes de la base de données. Par défaut, GORM s'attend à ce que les noms de champs correspondent exactement aux noms de colonnes. Alternativement, vous pouvez spécifier des mappages explicites entre les colonnes et les champs à l'aide de la balise gorm :
<code class="go">// Solution 1: Public Fields type Res struct { ID int Number int UserID int } // Solution 2: Explicit Mapping type res struct { id int `gorm:"column:id"` number int `gorm:"column:number"` user_id int `gorm:"column:user_id"` }</code>
En appliquant ces solutions, GORM peut analyser correctement les résultats de la requête dans le nouveau tableau.
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!