如何在 Gorm 中正确执行部分更新?

How to correctly perform partial updates in Gorm?

我有某种虚拟文件系统。文件夹列表,每个文件夹包含文件和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 中创建记录。

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

我的问题来了 - 如何跳过那些依赖更新,但将自动生成的查询 update/insert 保留到 file_acl table?

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

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

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