【问题标题】:Turn two gorm queries into one将两个 gorm 查询合二为一
【发布时间】:2021-08-20 16:18:38
【问题描述】:

我有以下型号

type Instance struct {
    gorm.Model
    Name               string `gorm:"index:idx_name_and_group,unique"`
    UserID             uint
    GroupID            uint `gorm:"index:idx_name_and_group,unique"`
    ...
}

type Group struct {
    gorm.Model
    Name                 string `gorm:"unique;"`
    Instances            []Instance
    ...
}

我正在尝试按名称和组名获取实例。

我可以用下面的代码做到这一点

func (r instanceRepository) FindByName(groupName string, instanceName string) (*model.Instance, error) {
    var instance *model.Instance
    var group *model.Group

    err := r.db.
        First(&group, "name = ?", groupName).Error
    if err != nil {
        return nil, err
    }

    err = r.db.
        Where("name = ? and group_id = ?", instanceName, group.ID).
        First(&instance).Error

    return instance, err
}

但我想把它变成一个查询。关于如何实现这一目标的任何想法?

【问题讨论】:

    标签: go go-gorm


    【解决方案1】:

    您始终可以使用Joins 函数进行SQL 连接。像这样的:

    func (r instanceRepository) FindByName(groupName string, instanceName string) (*model.Instance, error) {
        var instance *model.Instance
    
        err := r.db.
            Joins("INNER JOIN groups g ON g.id = instances.group_id").
            Where("g.name = ? AND instances.name = ?", groupName, instanceName).
            First(&instance).Error
        if err != nil {
            return nil, err
        }
    
        return instance, err
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-23
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多