【问题标题】:How to correctly perform partial updates in Gorm?如何在 Gorm 中正确执行部分更新?
【发布时间】:2018-03-30 02:27:02
【问题描述】:

我有某种虚拟文件系统。文件夹列表,每个文件夹包含文件和ACL。 所以结构看起来像这样:

type Model struct {
    ID        uint       `gorm:"primary_key" json:"id"`
}

type User struct {
    Model
    Name string
}

type Folder struct {
    Model
    Name string
}

type File struct {
    Model
    Name string
    FolderID      uint
    Folder        Folder
    Acl           []User `json:"acl" gorm:"many2many:file_acl"`
} 

它以完整的 JSON 形式来自前端。它被解组。 当我调用Save(&file) 时接下来会发生什么,它会正确存储文件,在file_acl 中创建记录。

它还会更新文件夹和用户。

我的问题来了 - 如何跳过那些依赖更新但保留自动生成的查询以更新/插入file_acl 表?

【问题讨论】:

    标签: go go-gorm


    【解决方案1】:

    我想你可能想要db.Set("gorm:save_associations", false).Save(...)

    【讨论】:

    • 它解决了一个问题,但立即带来了另一个问题 - file_acl 现在没有更新。
    • 这很棘手 - 从一方面我想更新文件及其元数据(有权访问文件的用户列表),但另一方面只是存储对用户和文件夹的引用。
    【解决方案2】:

    为了防止级联更新,您应该使用association_autoupdate 选项。

    Db.Set("gorm:association_autoupdate", false).Save(&file)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-04
      • 1970-01-01
      • 1970-01-01
      • 2021-01-22
      • 1970-01-01
      • 1970-01-01
      • 2022-08-12
      • 1970-01-01
      相关资源
      最近更新 更多