我有以下模型type Instance struct { gorm.Model Name string `gorm:"unique;"` UserID uint GroupID uint StackID uint RequiredParameters []InstanceRequiredParameter `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"requiredParameters,omitempty"` OptionalParameters []InstanceOptionalParameter `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"optionalParameters,omitempty"` DeployLog string `gorm:"type:text"`}type InstanceRequiredParameter struct { gorm.Model InstanceID uint `gorm:"index:idx_instance_required_parameter,unique"` StackRequiredParameterID uint `gorm:"index:idx_instance_required_parameter,unique"` StackRequiredParameter StackRequiredParameter `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"` Value string}type InstanceOptionalParameter struct { gorm.Model InstanceID uint `gorm:"index:idx_instance_optional_parameter,unique"` StackOptionalParameterID uint `gorm:"index:idx_instance_optional_parameter,unique"` StackOptionalParameter StackOptionalParameter `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"` Value string}type StackRequiredParameter struct { gorm.Model StackID uint `gorm:"index:idx_name_required_parameter,unique"` Name string `gorm:"index:idx_name_required_parameter,unique"`}type StackOptionalParameter struct { gorm.Model StackID uint `gorm:"index:idx_name_optional_parameter,unique"` Name string `gorm:"index:idx_name_optional_parameter,unique"`}我正在嘗試獲取一個包含參數的實例,并且也檢索了StackRequiredParameter/StackOptionalParameter,因為我需要Name屬性。但這需要3個查詢。任何人都可以建議一種方法,只需使用Gorm的一個查詢即可做到這一點嗎?
1 回答

慕絲7291255
TA貢獻1859條經驗 獲得超6個贊
您應該能夠使用如下方法執行此操作:
func (r instanceRepository) FindWithParametersById(id uint) (*model.Instance, error) {
var instance *model.Instance
err := r.db.Preload("RequiredParameters.StackRequiredParameter").Preload("OptionalParameters.StackOptionalParameter").First(&instance, id).Error
if err != nil {
return nil, err
}
return instance, nil
}
它仍將在數據庫中執行多個查詢,因為每個調用都會運行一個單獨的查詢,但至少您不必編寫所有這些代碼。Preload
- 1 回答
- 0 關注
- 115 瀏覽
添加回答
舉報
0/150
提交
取消