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



我是ORM(和GORM(的新手,如果这是一个明显的问题,我很抱歉,但文档中似乎没有涵盖。

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

问题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
}
  • User只属于一个Company→这是由代码处理的以上
  • 一个Company有许多User这是代码所暗示的吗以上或者我应该在Company中添加一个关系O2M吗

问题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
}
  • User有1+CreditCard→这是由代码处理的
  • 一个CreditCard可以属于几个用户(例如,一个共享家族CC(→这是隐含的吗(如果不是:如何建立O2M关系(
    还是CreditCard显式配置为只属于一个用户

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

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
}

相关内容

最新更新