例如,您的应用包含 user 和 credit card 模型,且每个 user 只能有一张 credit card。
重写外键
对于 has one
关系,同样必须存在外键字段。拥有者将把属于它的模型的主键保存到这个字段。
这个字段的名称通常由 has one
模型的类型加上其 主键
生成,对于上面的例子,它是 UserID
。
如果你想要使用另一个字段来保存该关系,你同样可以使用标签 foreignKey
来更改它,例如:
type User struct {
gorm.Model
CreditCard CreditCard `gorm:"foreignKey:UserName"`
// 使用 UserName 作为外键
}
type CreditCard struct {
Number string
UserName string
}
默认情况下,拥有者实体会将 has one
对应模型的主键保存为外键,您也可以修改它,用另一个字段来保存,例如下个这个使用 来保存的例子。
您可以使用标签 references
来更改它,例如:
多态关联
type Cat struct {
ID int
Name string
Toy Toy `gorm:"polymorphic:Owner;"`
}
type Dog struct {
ID int
Name string
Toy Toy `gorm:"polymorphic:Owner;"`
}
type Toy struct {
ID int
Name string
OwnerID int
}
db.Create(&Dog{Name: "dog1", Toy: Toy{Name: "toy1"}})
// INSERT INTO `dogs` (`name`) VALUES ("dog1")
// INSERT INTO `toys` (`name`,`owner_id`,`owner_type`) VALUES ("toy1","1","dogs")
您可以使用标签 polymorphicValue
来更改多态类型的值,例如:
查看 关联模式 获取 has one
相关的用法
预加载
GORM 可以通过 Preload
、Joins
预加载 has one
关联的记录,查看 预加载 获取详情
type User struct {
gorm.Model
Name string
ManagerID *uint
}
外键约束
你也可以在删除记录时通过 来删除关联的记录,查看 Delete with Select 获取详情