Skip to main content

多态关联

GORM 支持多态关联,这意味着一个模型可以属于多个其他模型。

例如,CatDog 都可以拥有 Toy

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
OwnerType string
}

注意:多态关联依赖 OwnerIDOwnerType 字段。OwnerType 会存储拥有者的表名(默认)。

自定义多态值

你可以使用 polymorphicValue 标签自定义存储在 OwnerType 中的值。

type Cat struct {
ID int
Name string
Toy Toy `gorm:"polymorphic:Owner;polymorphicValue:master_cat"`
}

type Dog struct {
ID int
Name string
Toy Toy `gorm:"polymorphic:Owner;polymorphicValue:master_dog"`
}