【问题标题】:Get Selected value from Golang Gorm Query从 Golang Gorm 查询中获取选定的值
【发布时间】:2020-08-09 17:57:21
【问题描述】:

我想在使用 gorm 查询后获取用户数据

item := []models.User{}

if config.DB.First(&item, "email = ?", email).RecordNotFound() || len(item) == 0 {
    c.JSON(500, gin.H{
        "status":  "error",
        "message": "record not found"})
    c.Abort()
    return
}

c.JSON(200, gin.H{
    "status": "success",
    "data":   item,
})

这是我的模型

type User struct {
gorm.Model
Stores     []Store // to show that customer can have many stores
UserName   string
FullName   string
Email      string `gorm:"unique_index"`
Password   string
SocialID   string
Provider   string
Avatar     string
Role       bool `gorm:"default:0"`
HaveStore  bool `gorm:"default:0"`
isActivate bool `gorm:"default:0"`
}

我只想在 gorm 查询后获取用户名,如何获取?我正在使用item.Username但是,错误显示item.UserName undefined (type []models.User has no field or method UserName)

【问题讨论】:

  • 对于“找不到记录”错误,您应该将响应代码从 500 更改为 404。

标签: mysql go go-gorm go-gin


【解决方案1】:

[] 表示slice,这意味着item 不是单个用户,而是用户切片,切片没有字段,它们具有存储在其中的单个实例的元素,以使用index expression (s[i]) 访问这些元素。要么做item[0].UserName 要么将item 声明为单个用户,而不是切片。即item := model.User{},那么你可以使用selector expressionitem.UserName

【讨论】:

    【解决方案2】:

    您正试图从该问题的用户切片中获取UserName。 如果电子邮件是一个唯一的字段数据库,那么您可以只使用用户模型而不是使用用户切片。

    item := models.User{}
    config.DB.First(&item, "email = ?", email)
    

    然后你可以像item.UserName这样的用户名访问

    【讨论】:

    • 是的,我刚刚意识到,我正在使用切片,而我只需要一行。谢谢
    猜你喜欢
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 2019-08-11
    • 2019-09-07
    • 2013-07-14
    • 2017-07-29
    • 1970-01-01
    • 2019-03-30
    相关资源
    最近更新 更多