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 关注
- 268 浏览
添加回答
举报