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

x7rlezfr  于 2023-01-05  发布在  PostgreSQL
关注(0)|答案(1)|浏览(268)

我有两个表users和documents。它们之间的关联方式是每个文档必须属于一个使用一对多关系的用户。当我尝试更新文档时,出现以下错误
错误:在表“documents”上插入或更新违反了外键约束“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)
}
dgsult0t

dgsult0t1#

您正在调用Db.Save(&document),但是document只填充了它的Name字段。这意味着UserID被设置为0。我猜您在User表中没有任何ID为0的用户,因此这违反了外键约束。
更新文档时,UserID字段应始终设置为现有用户,否则查询将失败。
尽管如此,我还是建议您学习一些数据库和golang的基础知识,因为您发布的代码相当混乱。

相关问题