csdn0811 2024-05-24 22:52 采纳率: 60.7%
浏览 2
已结题

gorm修改数据库问题

如果前端传过来的值是0,Status字段可以正常赋值,但数据库中的status值无法修改,如果前端传过来的是非0值,则数据库可以修改成功,为什么?

          <li> 状 态:
                      
                        <!-- 0:隐藏 1:显示 -->
                        <input {{ if eq .access.Status  1}} checked {{end}} type="radio" name="status" value="1" id="a" /> <label for="a">显示</label>
                        <input {{ if eq .access.Status  0}} checked {{end}} type="radio" name="status" value="0" id="b" /><label for="b">隐藏</label>
                    </li>
status, _ := strconv.Atoi(c.PostForm("status")) // 状态

    access := model.Access{
        ModuleName:  moduleName,
        Type:        accessType,
        ActionName:  actionName,
        Url:         url,
        ModuleId:    moduleId,
        Sort:        sort,
        Description: description,
        Status:      status,
        AddTime:     time.Now(),
    }
    fmt.Println("修改后的状态是:", access.Status)

    err := dao.Mdb.Where("id= ?", id).Updates(access).Error
数据库的结构
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/36100db9d3e148cbaf552989bc3a4976.png "#left")

奇怪的是,我单独修改status字段,数据库可以正常修改成功,为什么呢?
dao.Mdb.Model(&access).Where("id= ?", id).Update("status", access.Status).Error

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-05-24 22:52
    关注

    引自免费微信小程序:皆我百晓生

    看起来你在使用Gorm进行数据库操作时遇到了一个奇怪的问题。当前端传递来的status值为0时,更新操作似乎没有生效。让我们一步步排查这个问题。

    首先,确认一下前端发送的数据格式是否正确。在HTML部分,当Status为0时,对应的 radio button 应该被选中。检查前端提交的表单数据是否确实包含了status字段,并且其值为0。

    然后,查看后端处理这部分逻辑的部分。你使用的代码片段看起来没有明显错误,但是为了确保所有情况都被覆盖,我们可以稍微调整一下设置access.Status的代码。使用 if-else if 结构,这样无论status是0还是非0,都能正确地设置access.Status

    status, err := strconv.Atoi(c.PostForm("status"))
    if err != nil {
        // 处理错误,例如返回错误信息给前端
    }
    if status == 0 {
        access.Status = 0
    } else if status > 0 {
        access.Status = status
    } else {
        // 可能有其他异常值,处理这种情况
    }
    fmt.Println("修改后的状态是:", access.Status)
    

    接下来,确保你的模型(model.Access)中定义了Status字段,并且它是可写的。如果Status字段是只读的,那么Gorm将不会尝试更新它。确认一下数据库模型中Status字段的定义,确保它是可写的。

    如果你已经检查过上述所有内容并且它们都看起来是正确的,那么可能是数据库层面的问题。尝试使用Gorm的简单更新方法,看看是否会有不同的结果:

    err := dao.Mdb.Model(&access).Where("id=?", id).Update("Status", access.Status).Error
    

    这个版本的更新语句更直接,可能会排除一些潜在的间接问题。如果这个版本仍然不起作用,那么可能需要查看数据库日志,看是否有任何关于更新失败的提示。

    最后,如果以上都无法解决,那可能需要更多的上下文信息,比如数据库的具体类型(MySQL、PostgreSQL等),以及数据库表的实际结构。如果问题依然存在,请提供这些额外的信息,以便我能进一步协助你。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 6月2日
  • 已采纳回答 5月25日
  • 创建了问题 5月24日