教程 > gorm 教程 > 阅读:123

gorm belongs to——迹忆客-ag捕鱼王app官网

belongs to

belongs to 会与另一个模型建立了一对一的连接。 这种模型的每一个实例都“属于”另一个模型的一个实例。

例如,我们的应用包含 user 和 company,并且每个 user 能且只能被分配给一个 company。下面的类型就表示这种关系。

注意,在 user 对象中,有一个和 company 一样的 companyid。 默认情况下, companyid 被隐含地用来在 user 和 company 之间创建一个外键关系, 因此必须包含在 user 结构体中才能填充 company 内部结构体。

// `user` 属于 `company`,`companyid` 是外键
type user struct {
  gorm.model
  name      string
  companyid int
  company   company
}
type company struct {
  id   int
  name string
}

请参阅 预加载 以了解内部结构的详细信息。


重写外键

要定义一个 belongs to 关系,数据库的表中必须存在外键。默认情况下,外键的名字,使用拥有者的类型名称加上表的主键的字段名字

例如,定义一个user实体属于company实体,那么外键的名字一般使用companyid。

gorm同时提供自定义外键名字的方式,如下例所示。

type user struct {
  gorm.model
  name         string
  companyrefer int
  company      company `gorm:"foreignkey:companyrefer"`
  // 使用 companyrefer 作为外键
}
type company struct {
  id   int
  name string
}

重写引用

对于 belongs to 关系,gorm 通常使用数据库表,主表(拥有者)的主键值作为外键参考。 正如上面的例子,我们使用主表company中的主键字段id作为外键的参考值。

如果在company实体中设置了user实体,那么gorm会自动把company中的id属性保存到user的companyid属性中。

同样的,我们也可以使用标签 references 来更改它,例如:

type user struct {
  gorm.model
  name      string
  companyid string
  company   company `gorm:"references:code"` // 使用 code 作为引用
}
type company struct {
  id   int
  code string
  name string
}

注意 如果外键名恰好在拥有者类型中存在,gorm 通常会错误的认为它是 has one 关系。我们需要在 belongs to 关系中指定 references

type user struct {
  gorm.model
  name      string
  companyid string
  company   company `gorm:"references:companyid"` // 使用 company.companyid 作为引用
}
type company struct {
  companyid   int
  code        string
  name        string
}

belongs to 的 crud

查看 关联模式 获取 belongs to 相关的用法


预加载

gorm 可以通过 preload、joins 预加载 belongs to 关联的记录,查看 预加载 获取详情


外键约束

你可以通过 constraint 标签配置 onupdate、ondelete 实现外键约束,在使用 gorm 进行迁移时它会被创建,例如:

type user struct {
  gorm.model
  name      string
  companyid int
  company   company `gorm:"constraint:onupdate:cascade,ondelete:set null;"`
}
type company struct {
  id   int
  name string
}

查看笔记

扫码一下
查看教程更方便
网站地图