Я использую приведенные ниже структуры и не хочу, чтобы gorm жаловался на дублирование идентификатора primary_key. Поэтому я попробовал следующий подход, чтобы игнорировать поле id в методе create. ie Я создал другую структуру только для создания, и gorm успешно игнорирует значение внутри переданного идентификатора. Но мне нужно получить идентификатор только что созданной записи. Который я хоть и вставил в GetID
, но в нем не было идентификатора.
Проблема с описанным выше подходом : Я не могу знать идентификатор вновь созданной записи. если бы я знал каким-либо образом, я бы извлек эту запись в полной пользовательской структуре и отправил бы обратно пользователю в ответ, но это не произошло.
Проблема : я пытаюсь игнорировать идентификатор, переданный во время создания. Кажется, есть два возможных решения: либо Gorm игнорирует идентификатор, переданный во время создания, и возвращает новый идентификатор в поле. Или Bind Json контекста джина игнорирует значение и не привязывает его к пользовательской структуре. Любая помощь очень ценится. Спасибо
type UserBase struct {
ID uint `gorm:"primary_key"`
Email string `validate:"required,email"`
Password string
LanguageId int16
}
type UserCreateUpdate struct {
UserBase
ID uint `gorm:"-",json:"id"`
GetID uint `gorm:"column:id",json:"id"`
// Language language_schema.Language `json:",omitempty"`
}
type User struct {
UserBase
CreatedAt time.Time
UpdatedAt *time.Time // As it can be null thats why the pointer
Language language_schema.Language `json:",omitempty"`
}
// And this is create method
db := schema_utils.GetDB()
var user_create user_schema.UserCreateUpdate
c.BindJSON(&user_create)
validate := user_schema.SchemaValidator(web_api.GetValidator())
if ok, errors := schema_utils.ValidateInputs(user_create, validate); !ok {
web_api.ValidationErrorResponse(errors, c)
} else {
if result := db.Table("users").Create(&user_create); result.Error != nil {
c.JSON(http.StatusUnprocessableEntity, gin.H{"error": result.Error})
} else {
var user user_schema.User
fmt.Println("created")
fmt.Println(user_create.ID)
fmt.Println(user_create.GetID)
db.Where("id = ?", user_create.GetID).Table("users").Preload("Language").First(&user)
c.JSON(200, user)
}
}