关联
属于
登录后可跨设备保存划线和私人笔记登录
属于(Belongs To)
belongs to 关联在两个模型之间建立一对一的关系,声明该关系的每个实例都"属于"另一个模型的一个实例。
例如,如果您的应用程序包含用户和公司,且每个用户只能被分配到一家公司,那么以下类型表示了这种关系。请注意,User 对象上既有 CompanyID,也有 Company。默认情况下,CompanyID 被隐式用于在 User 表和 Company 表之间创建外键关系,因此必须包含在 User 结构体中,以便填充 Company 内部结构体。
type User struct {
gorm.Model
Name string
CompanyID int
Company Company
}
type Company struct {
ID int
Name string
}有关填充内部结构体的详细信息,请参阅 预加载。
覆盖外键
要定义属于关系,必须存在外键,默认外键使用所有者的类型名称加上其主字段名称。
对于上面的示例,要定义属于 Company 的 User 模型,按约定外键应为 CompanyID。
GORM 提供了一种自定义外键的方法,例如:
type User struct {
gorm.Model
Name string
CompanyRefer int
Company Company `gorm:"foreignKey:CompanyRefer"`
}
type Company struct {
ID int
Name string
}覆盖引用
对于属于关系,GORM 通常使用所有者的主字段作为外键的值,对于上面的示例,就是 Company 的 ID 字段。
当您将用户分配给公司时,GORM 会将公司的 ID 保存到用户的 CompanyID 字段中。
您可以使用 references 标签来更改它,例如:
type User struct {
gorm.Model
Name string
CompanyID string
Company Company `gorm:"references:Code"`
}
type Company struct {
ID int
Code string
Name string
}注意 如果覆盖的外键名称已存在于所有者类型中,GORM 通常会将关系猜测为
has one,我们需要在belongs to关系中指定references。
type User struct {
gorm.Model
Name string
CompanyID int
Company Company `gorm:"references:CompanyID"`
}
type Company struct {
CompanyID int
Code string
Name string
}属于关系的增删改查
请查看 关联模式 以了解如何处理属于关系。
预加载
GORM 允许通过 Preload 或 Joins 预加载属于关联,详细信息请参阅 预加载(Eager loading)。
外键约束
您可以使用 constraint 标签设置 OnUpdate、OnDelete 约束,这些约束将在使用 GORM 进行迁移时创建,例如:
type User struct {
gorm.Model
Name string
CompanyID int
Company Company `gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;"`
}
type Company struct {
ID int
Name string
}评论
登录后参与评论
正在加载评论…
KnowForge