如何在没有预加载的情况下使用 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=]方法。

你几乎完成了第二个查询,你可以结合使用 PreloadWhere 函数。

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)