我有以下模型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 关注
- 101 浏览
添加回答
举报
0/150
提交
取消