全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-21 8 分钟 ✍️ juanwangdev

GORM 关联数据创建与更新

本文介绍 GORM 中关联数据的级联创建与更新方法。

级联创建

使用 Create 方法

创建主记录时自动创建关联记录。

Go
// 定义模型
type User struct {
    ID      uint
    Name    string
    Profile Profile
    Orders  []Order
}

type Profile struct {
    ID     uint
    UserID uint
    Bio    string
}

// 级联创建
user := User{
    Name: "张三",
    Profile: Profile{
        Bio: "GORM 开发者",
    },
    Orders: []Order{
        {Product: "GORM 指南", Quantity: 1},
        {Product: "Go 编程", Quantity: 2},
    },
}

db.Create(&user)

Create 方法会自动填充关联字段的外键值(如 Profile.UserID)。

使用 Association 方法

手动管理关联关系的创建。

Go
// 先创建主记录
user := User{Name: "张三"}
db.Create(&user)

// 添加单个关联
profile := Profile{Bio: "开发者"}
db.Model(&user).Association("Profile").Append(&profile)

// 添加多个关联
order1 := Order{Product: "商品A"}
order2 := Order{Product: "商品B"}
db.Model(&user).Association("Orders").Append(&order1, &order2)

级联更新

使用 Save 方法

Save 方法会级联更新关联记录。

Go
// 查询并修改
var user User
db.Preload("Profile").Preload("Orders").First(&user, 1)

user.Name = "李四"
user.Profile.Bio = "高级开发者"
db.Save(&user)

使用 Update/Updates 方法

仅更新主记录字段,不级联更新关联记录。

Go
// 更新单个字段
db.Model(&user).Update("Name", "李四")

// 更新多个字段
db.Model(&user).Updates(User{Name: "李四", Age: 30})

// 更新关联记录需单独操作
db.Model(&user.Profile).Update("Bio", "新简介")

使用 Association 替换关联

Go
// 替换所有关联(先删除旧关联,再添加新关联)
newOrders := []Order{{Product: "新商品"}}
db.Model(&user).Association("Orders").Replace(newOrders)

// 删除关联(不删除数据库记录)
db.Model(&user).Association("Orders").Delete(&order)

// 清空所有关联
db.Model(&user).Association("Orders").Clear()

注意事项

  1. Create 方法仅自动填充外键,不会自动预加载关联数据。
  2. Save 方法会级联更新所有关联记录,需谨慎使用。
  3. Association 的 Delete/Clear 操作默认只删除关联关系,不删除关联记录本身。
  4. 级联操作需要模型正确定义 belongsTo、hasMany 等关联标签。

要点总结

  • Create方法支持级联创建,自动填充外键值。
  • Save方法级联更新所有关联记录,影响范围广。
  • Update/Updates仅更新主记录,关联记录需单独更新。
  • Association方法提供 Append/Replace/Delete/Clear 四种关联管理方式。
  • 级联操作依赖正确的模型关联标签定义。

存放路径:D:\git2\jwdev\articles\GORM\进阶\关联关系管理\关联数据创建与更新.md

📝 发现内容有误?点击此处直接编辑

← 上一篇 GORM 一对多关系配置
下一篇 → GORM 关联查询与预加载
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库