所属关系
belongs to 关联关系建立与另一个模型的一对一连接,以便声明模型的每个实例“属于”另一个模型的一个实例。
例如,如果您的应用程序包含用户和公司,并且每个用户可以分配到一个公司,则以下类型表示该关系。请注意,在 User 对象上,同时存在 CompanyID 和 Company。默认情况下,CompanyID 被隐式用于在 User 和 Company 表之间创建外键关系,因此必须包含在 User 结构体中才能填充 Company 内部结构体。
// `User` belongs to `Company`, `CompanyID` is the foreign key |
有关填充内部结构体的详细信息,请参阅预加载。
覆盖外键
要定义所属关系,必须存在外键,默认外键使用所有者的类型名称加上其主键字段名称。
对于上面的示例,要定义属于 Company 的 User 模型,按照惯例,外键应为 CompanyID
GORM 提供了一种自定义外键的方法,例如
type User struct { |
覆盖引用
对于所属关系,GORM 通常使用所有者的主键字段作为外键的值,对于上面的示例,它是 Company 的字段 ID。
当您将用户分配给公司时,GORM 会将公司的 ID 保存到用户的 CompanyID 字段中。
您可以使用标签 references 更改它,例如
type User struct { |
**注意** 如果覆盖的外键名称已存在于所有者的类型中,GORM 通常会将关系猜测为
has one,我们需要在belongs to关系中指定references。
type User struct { |
使用所属关系进行 CRUD 操作
请查看关联模式以了解如何使用所属关系
预加载
GORM 允许使用 Preload 或 Joins 预加载所属关系,有关详细信息,请参阅预加载(渴望加载)
外键约束
您可以使用标签 constraint 设置 OnUpdate、OnDelete 约束,它将在使用 GORM 迁移时创建,例如
type User struct { |