Получить выбранное значение из Golang Gorm Query - PullRequest
1 голос
/ 26 апреля 2020

я хочу получить пользовательские данные после того, как я сделаю запрос с помощью 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"`
}

я просто хочу получить имя пользователя после запроса do из gorm как это получить? Я использую item.Username, но ошибка показывает, что item.UserName undefined (type []models.User has no field or method UserName)

Спасибо

Ответы [ 2 ]

1 голос
/ 26 апреля 2020

[] обозначает слайс , что означает, что item не отдельный пользователь, а слайс пользователей, и слайсы не имеют полей, у них есть элементы, которые хранятся в отдельных экземплярах. в них для доступа к этим элементам используется индексное выражение (s[i]). Либо выполните item[0].UserName, либо объявите item как одного пользователя, а не как фрагмент. то есть item := model.User{}, тогда вы можете использовать выражение селектора item.UserName.

0 голосов
/ 26 апреля 2020

Вы пытаетесь получить UserName от пользователя, что проблема. Если электронная почта является уникальной полевой базой данных, тогда вы можете использовать только модель пользователя, а не срезку пользователя.

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

Тогда вы можете получить доступ как имя пользователя, например item.UserName

...