返回顶部
首页 > 资讯 > 精选 >GORM 无法更新一对多关系中的数据
  • 554
分享到

GORM 无法更新一对多关系中的数据

2024-02-10 19:02:43 554人浏览 泡泡鱼
摘要

PHP小编苹果在使用GORM框架时,可能会遇到一个常见问题:无法更新一对多关系中的数据。在一对多关系中,我们通常会有一个主表和一个从表,但是在进行更新操作时,GoRM可能无法正确处理从

PHP小编苹果在使用GORM框架时,可能会遇到一个常见问题:无法更新一对多关系中的数据。在一对多关系中,我们通常会有一个主表和一个从表,但是在进行更新操作时,GoRM可能无法正确处理从表的数据更新。这个问题可能会导致数据不一致或者更新失败。在接下来的文章中,我们将详细探讨这个问题的解决方法,以帮助开发者更好地使用GORM框架。

问题内容

我有两个表用户和文档。它们以这样一种方式相关:每个文档必须属于使用一对多关系的用户。当我尝试更新文档时出现以下错误


error: insert or update on table "documents" violates foreign key
constraint "fk_users_documents" (sqlstate 23503)

这是我的结构定义和更新函数

type User struct {
    gorm.Model
    Name      string
    Email     string
    PassWord  string
    Documents []Document 
}

type Document struct {
    gorm.Model
    Name   string
    UserID uint
}




//Update document by id
func (h handler)UpdateDocument(w Http.ResponseWriter, r *http.Request) {

    // once again, we will need to parse the path parameters
    var updatedDoc Document
    reqBody, _ := ioutil.ReadAll(r.Body)
    JSON.Unmarshal(reqBody, &updatedDoc)
    var document Document
    vars := mux.Vars(r)
    id := vars["id"]


    
    
    if result := Db.First(&updatedDoc, id); result.Error != nil {
        fmt.Println(result.Error)
    }

    document.Name=updatedDoc.Name

    
    Db.Save(&document)
    json.NewEncoder(w).Encode(&updatedDoc)
}

解决方法

您正在调用 Db.Save(&document)document 仅填充了其 Name 字段。这意味着 UserID 设置为 0。我猜测 User 表中不存在任何 ID 为 0 的用户,因此这违反了外键约束。

更新文档时,UserID 字段应始终设置为现有用户,否则查询将失败。

不管怎样,我建议你学习一些数据库golang基础知识,因为你发布的代码相当混乱。

以上就是GORM 无法更新一对多关系中的数据的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: GORM 无法更新一对多关系中的数据

本文链接: https://lsjlt.com/news/563198.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作