我应该明确地创建一个与 "Belongs To" 或 "Has Many" 对称的关系吗?

Should I explicitly create a relation symmetrical to "Belongs To" or "Has Many"?

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

我将使用 examples from the documentation 作为我的问题的基础

问题 1:属于

// `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
}

问题 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
}

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

type Company struct {
  ID   int
  Name string
  Users []User
}

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

type User struct {
  gorm.Model
  CreditCards []CreditCard `gorm:"many2many:users_creditcards"`
}

type CreditCard struct {
  gorm.Model
  Number string
}