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

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

Barbara Streisand
发布: 2024-10-27 05:25:29
原创
652 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板