所属关系
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 { |