我有以下模型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"`}我正在嘗試獲取一個(gè)包含參數(shù)的實(shí)例,并且也檢索了StackRequiredParameter/StackOptionalParameter,因?yàn)槲倚枰狽ame屬性。但這需要3個(gè)查詢。任何人都可以建議一種方法,只需使用Gorm的一個(gè)查詢即可做到這一點(diǎn)嗎?
1 回答

慕絲7291255
TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊
您應(yīng)該能夠使用如下方法執(zhí)行此操作:
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
}
它仍將在數(shù)據(jù)庫中執(zhí)行多個(gè)查詢,因?yàn)槊總€(gè)調(diào)用都會(huì)運(yùn)行一個(gè)單獨(dú)的查詢,但至少您不必編寫所有這些代碼。Preload
- 1 回答
- 0 關(guān)注
- 111 瀏覽
添加回答
舉報(bào)
0/150
提交
取消