Идентификатор записей в моей базе данных продолжает увеличиваться, даже если при создании создается ошибка - PullRequest
0 голосов
/ 05 апреля 2020

Я использую gorm с джином.

Я ставлю валидацию на модели User для уникального значения. Я предполагаю, что когда новый ввод получит ошибку, потому что эта проверка не записана в базе данных, и да, она не записана. Но я столкнулся с проблемой: идентификатор неудачного ввода где-то хранится. Поэтому, когда я не делаю ошибки, идентификатор не в порядке.

пример:

  • Я пишу пользователю по электронной почте john@doe.com. это успешно с ID = 1
  • Я создаю пользователя по электронной почте john@doe.com. Это ошибка, потому что проверка
  • Я создаю пользователя по электронной почте jane@doe.com. Это успешно с ID = 3

Почему это происходит? пожалуйста, посмотрите на мой код

type User struct {
    gorm.Model
    Name     string `gorm:"not null" json:"name"`
    Email    string `gorm:"unique;not null" json:"email"`
    Username string `gorm:"unique;not null" json:"username"`
    Password string `gorm:"not null" json:"password"`
    Phone    string `gorm:"unique" json:"phone"`
}
type registerInput struct {
    Name     string `json:"name" binding:"required"`
    Email    string `json:"email" binding:"required"`
    Username string `json:"username" binding:"required"`
    Password string `json:"password" binding:"required"`
    Phone    string `json:"phone"`
}
func Register(c *gin.Context) {
    db := c.MustGet("db").(*gorm.DB)

    var input registerInput
    if err := c.ShouldBindJSON(&input); err != nil {
        c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        return
    }

    hashedPassword, _ := hashPassword(input.Password)

    user := models.User{Name: input.Name, Email: input.Email, Username: input.Username, Password: hashedPassword, Phone: input.Phone}
    if err := db.Create(&user).Error; err != nil {
        c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        return
    }
    c.JSON(http.StatusOK, gin.H{"data": user})
}
...