2 回答

TA貢獻1856條經驗 獲得超11個贊
好吧,這是一種解決方法,可能我會在Gorm 的 Github上打開一個問題,因為我認為這不是正確的做法,我唯一要做的就是從使用反射UpdateListInput struct的變量轉換包裹map[string]interface{}
這是我的控制器:
func Update(c *gin.Context) {
var list models.List
if err := models.DB.Where("id = ?", c.Param("id")).First(&list).Error; err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "Record not found"})
return
}
var input UpdateListInput
if err := c.ShouldBindJSON(&input); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
v := reflect.ValueOf(input)
typeOfV := v.Type()
inputData := map[string]interface{}{}
for i := 0; i < v.NumField(); i++ {
inputData[typeOfV.Field(i).Name] = v.Field(i).Interface()
}
if err := models.DB.Model(&list).Updates(inputData).Error; err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"data": list})
}

TA貢獻1770條經驗 獲得超3個贊
在控制器中試試這個:
data := models.List{Title: input.Title,Status: input.Status}
if err := models.DB.Model(&list).Updates(&data).Error; err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
}
c.JSON(http.StatusOK, gin.H{"data": data})
- 2 回答
- 0 關注
- 302 瀏覽
添加回答
舉報