我应该明确地创建一个与 "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
}
- 一个
User
只属于一个Company
→这由代码处理
以上
- 一个
Company
有很多User
→这是代码隐含的
above? 或者我应该在 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
}
- A
User
有 1+ CreditCard
→ 这由代码处理
- 一个
CreditCard
可以属于多个用户(比如,一个共享的家庭CC)→是否暗示?(如果不是:如何建立O2M关系).
还是 CreditCard
被 明确配置 属于 只有一个 用户?
问题 1: 根据您定义结构的方式,您不需要在 Company
结构中明确的 O2M 关系,但是在加载公司详细信息时,如果您想要加载分配给该特定公司的所有用户,您还需要添加该字段。它将需要一个额外的函数调用,例如 Preload
或 Joins
,但您不需要明确定义这种关系。
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
}
我是 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
}
- 一个
User
只属于一个Company
→这由代码处理 以上 - 一个
Company
有很多User
→这是代码隐含的 above? 或者我应该在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
}
- A
User
有 1+CreditCard
→ 这由代码处理 - 一个
CreditCard
可以属于多个用户(比如,一个共享的家庭CC)→是否暗示?(如果不是:如何建立O2M关系).
还是CreditCard
被 明确配置 属于 只有一个 用户?
问题 1: 根据您定义结构的方式,您不需要在 Company
结构中明确的 O2M 关系,但是在加载公司详细信息时,如果您想要加载分配给该特定公司的所有用户,您还需要添加该字段。它将需要一个额外的函数调用,例如 Preload
或 Joins
,但您不需要明确定义这种关系。
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
}