关联

多态

qianmoQqianmoQ· 更新于 2026-09-23· 阅读 3 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

多态关联

GORM 支持 has one 和 has many 的多态关联,它会将被拥有的实体的表名保存到多态类型的字段中,主键值保存到多态字段中。

默认情况下,polymorphic:<value> 会以 <value> 作为列类型和列 ID 的前缀。

该值为表名的复数形式。

type Dog struct {
  ID   int
  Name string
  Toys []Toy `gorm:"polymorphic:Owner;"`
}

type Toy struct {
  ID        int
  Name      string
  OwnerID   int
  OwnerType string
}

db.Create(&Dog{Name: "dog1", Toys: []Toy{{Name: "toy1"}, {Name: "toy2"}}})

你可以使用以下 GORM 标签分别指定多态属性:

  • polymorphicType:指定列类型。
  • polymorphicId:指定列 ID。
  • polymorphicValue:指定类型的值。
type Dog struct {
  ID   int
  Name string
  Toys []Toy `gorm:"polymorphicType:Kind;polymorphicId:OwnerID;polymorphicValue:master"`
}

type Toy struct {
  ID        int
  Name      string
  OwnerID   int
  Kind      string
}

db.Create(&Dog{Name: "dog1", Toys: []Toy{{Name: "toy1"}, {Name: "toy2"}}})

在这些示例中,我们使用的是 has-many 关系,但同样的原则也适用于 has-one 关系。

GitHub tag (latest SemVer)

评论

登录后参与评论

正在加载评论…