首页  >  文章  >  后端开发  >  如何有效地将 GORM 查询结果扫描到结构中:解决映射问题的指南

如何有效地将 GORM 查询结果扫描到结构中:解决映射问题的指南

Barbara Streisand
Barbara Streisand原创
2024-10-27 05:25:29508浏览

How to Effectively Scan GORM Query Results into Structs: A Guide to Resolving Mapping Issues

将 GORM 查询结果扫描到结构中

使用 GORM 查询数据时,将结果扫描到自定义数据结构时可能会遇到问题。本文探讨了如何有效解决此类挑战。

示例代码和问题描述

考虑以下代码,该代码使用左联接从两个表(users 和credit_cards)检索数据:

<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>

此查询生成以下结果:

[
  {0 0 0},
  {0 0 0},
  {0 0 0},
  {0 0 0},
  {0 0 0},
  {0 0 0}
]

尽管在数据库中获得了正确的查询结果集,但新数组仅由默认值组成。

解决方案:字段命名约定和映射

要解决此问题,请确保 res 结构中的字段名称与数据库列名称对齐。默认情况下,GORM 希望字段名称与列名称完全匹配。或者,您可以使用 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>

通过应用这些解决方案,GORM 可以正确地将查询结果扫描到新数组中。

以上是如何有效地将 GORM 查询结果扫描到结构中:解决映射问题的指南的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn