如何在没有预加载的情况下使用 GORM 连接多个表
How to join multiple tables using GORM without Preload
我目前有 3 个表,它们之间通过 GORM 建立了关系。我希望向卖家查询有关该关系的所有信息。
这是我的实体:
type ShopType struct {
ID uint `gorm:"primarykey" json:"id"`
Name string `json:"name" xml:"name" form:"name" query:"name"
}
type Shop struct {
ID uint `gorm:"primarykey" json:"id"`
Name string `json:"name" xml:"name" form:"name" query:"name"
ShopType ShopType `gorm:"ShopTypeID;constraint:OnUpdate:CASCADE,OnDelete:RESTRICT;" json:"-"`
}
type Seller struct {
ID uint `gorm:"primarykey" json:"id"`
Firstname string `json:"firstname" xml:"firstname" form:"firstname" query:"firstname"
Lastname string `json:"lastname" xml:"lastname" form:"lastname" query:"lastname"
Shop Shop `gorm:"foreignKey:ShopID;constraint:OnUpdate:CASCADE,OnDelete:RESTRICT;" json:"-"`
}
无法使用 Joins
而不是 Preload
,例如 :
db.Model(&models.Seller{}).Joins("Shop").Joins("Shop.ShopType").Find(&results)
?
我已经试过了,但是没用。
我也试过了:
db.Model(&models.Seller{}).Joins("JOIN shops s on s.id = sellers.shop_id").Joins("JOIN shop_types st on st.id = s.shop_type_id")
成功了,但是没有填写Shop和ShopType实体的属性,只填写了卖家的信息。
我希望使用 Joins
而不是 Preload
来加入我的实体,因为我想在我的查询中添加一些子句,例如:.Where('Shop.ShopType.Name IN (?)')
而 [= 是不可能的14=]方法。
你几乎完成了第二个查询,你可以结合使用 Preload
和 Where
函数。
var sellers []Seller
db.Joins("JOIN shops s on s.id = sellers.shop_id").
Joins("JOIN shop_types st on st.id = s.shop_type_id").
Preload("Shop.ShopType").
Where("st.name IN (?)", []string{"Store1", "Store2"}).
Find(&sellers)
我目前有 3 个表,它们之间通过 GORM 建立了关系。我希望向卖家查询有关该关系的所有信息。 这是我的实体:
type ShopType struct {
ID uint `gorm:"primarykey" json:"id"`
Name string `json:"name" xml:"name" form:"name" query:"name"
}
type Shop struct {
ID uint `gorm:"primarykey" json:"id"`
Name string `json:"name" xml:"name" form:"name" query:"name"
ShopType ShopType `gorm:"ShopTypeID;constraint:OnUpdate:CASCADE,OnDelete:RESTRICT;" json:"-"`
}
type Seller struct {
ID uint `gorm:"primarykey" json:"id"`
Firstname string `json:"firstname" xml:"firstname" form:"firstname" query:"firstname"
Lastname string `json:"lastname" xml:"lastname" form:"lastname" query:"lastname"
Shop Shop `gorm:"foreignKey:ShopID;constraint:OnUpdate:CASCADE,OnDelete:RESTRICT;" json:"-"`
}
无法使用 Joins
而不是 Preload
,例如 :
db.Model(&models.Seller{}).Joins("Shop").Joins("Shop.ShopType").Find(&results)
?
我已经试过了,但是没用。
我也试过了:
db.Model(&models.Seller{}).Joins("JOIN shops s on s.id = sellers.shop_id").Joins("JOIN shop_types st on st.id = s.shop_type_id")
成功了,但是没有填写Shop和ShopType实体的属性,只填写了卖家的信息。
我希望使用 Joins
而不是 Preload
来加入我的实体,因为我想在我的查询中添加一些子句,例如:.Where('Shop.ShopType.Name IN (?)')
而 [= 是不可能的14=]方法。
你几乎完成了第二个查询,你可以结合使用 Preload
和 Where
函数。
var sellers []Seller
db.Joins("JOIN shops s on s.id = sellers.shop_id").
Joins("JOIN shop_types st on st.id = s.shop_type_id").
Preload("Shop.ShopType").
Where("st.name IN (?)", []string{"Store1", "Store2"}).
Find(&sellers)