为了账号安全,请及时绑定邮箱和手机立即绑定

我应该明确地创建一个与“属于”或“有很多”对称的关系吗?

我应该明确地创建一个与“属于”或“有很多”对称的关系吗?

Go
幕布斯6054654 2022-11-23 15:45:56

我是 ORM(和 GORM)的新手,如果这是一个明显的问题,我深表歉意,但文档似乎没有涵盖它。


我将使用文档中的示例作为我的问题的基础


问题一:属于

// `User` belongs to `Company`, `CompanyID` is the foreign key

type User struct {

  gorm.Model

  Name      string

  CompanyID int

  Company   Company

}


type Company struct {

  ID   int

  Name string

}

A只User属于一个Company→ 这由上面的代码处理

ACompany有很多User→上面的代码暗示了这一点吗?或者我应该以某种方式添加 O2M 关系Company吗?

问题2:有很多

// User has many CreditCards, UserID is the foreign key

type User struct {

  gorm.Model

  CreditCards []CreditCard

}


type CreditCard struct {

  gorm.Model

  Number string

  UserID uint

}

AUser有 1+ CreditCard→ 这由代码处理

ACreditCard可以属于多个用户(比如,一个共享的家庭 CC)→是隐含的吗?(如果没有:如何建立 O2M 关系)。

或者,它CreditCard是明确配置为仅属于一个用户的情况吗?


查看完整描述

1 回答

?
慕沐林林

TA贡献1746条经验 获得超9个赞

Q1: 根据您定义结构的方式,结构中不需要明确的 O2M 关系Company,但是在加载公司详细信息时,如果要加载分配给该特定公司的所有用户,则需要添加该字段以及。它将需要一个额外的函数调用,例如Preloador Joins,但您不需要明确定义这种关系。


type Company struct {

  ID   int

  Name string

  Users []User

}

Q2:现在定义关系的方式,它被配置CreditCard为只属于一个用户。如果你想要一个多对多的关系,你需要指定关系表。这里有更多关于它的文档,但它应该看起来像这样:


type User struct {

  gorm.Model

  CreditCards []CreditCard `gorm:"many2many:users_creditcards"`

}


type CreditCard struct {

  gorm.Model

  Number string

}


查看完整回答
反对 回复 2022-11-23

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信