为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Gorm 查询多个列

使用 Gorm 查询多个列

Go
慕桂英546537 2022-09-05 17:35:25
我的数据库包括以下列,“model_package”和“model_variant”。我尝试通过在 里面指定这两列来使用 Gorm 查询 db。选择(),但是,我不断收到扫描错误。通常,当我选择单个列(即)时,它会返回到包含所有值的数组(切片),因此当我选择多列时,我认为它应该返回到二维数组(切片),就像下面的代码一样。.Select("model_package")我的目标是将这两个字段组合成一个字符串。例如,如果db中的一行具有以下值“model_package”:“pkg1”和“model_variant”:“var1”,那么我想创建这个字符串“pkg1_var1”。如何构造正确的查询以获取数据库上每行的两个值。我的代码:func (s *store) ListAllModelNames() ([][]string, error) {    var modelNames [][]string    result := s.db.Table(mfcTable).Select("model_package", "model_variant").Scan(&modelNames)    if result.Error != nil {        return nil, result.Error    }    return modelNames, nil}错误:sql: Scan error on column index 0, name "model_package": destination not a pointer; sql: Scan error on column index 0, name "model_package": destination not a pointer; sql: Scan error on column index 0, name "model_package": destination not a pointer; sql: Scan error on column index 0, name "model_package": destination not a pointer; sql: Scan error on column index 0, name "model_package": destination not a pointer; sql: Scan error on column index 0, name "model_package": destination not a pointer; sql: Scan error on column index 0, name "model_package": destination not a pointer; sql: Scan error on column index 0, name "model_package": destination not a pointer
查看完整描述

1 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

您可以尝试以下几个选项:


选项 1 - 为 SELECT 查询创建一个视图模型,并将其返回以执行所需的操作。


type ModelName struct {

   ModelPackage string

   ModelVariant string

}


func (s *store) ListAllModelNames() ([]ModelName, error) {

    var modelNames []ModelName

    result := s.db.Table(mfcTable).Select("model_package", "model_variant").Scan(&modelNames)

    if result.Error != nil {

        return nil, result.Error

    }

    return modelNames, nil

}

选项 2 - 使用 SELECT 查询中的函数进行串联。CONCAT()


func (s *store) ListAllModelNames() ([]string, error) {

    var modelNames []string

    result := s.db.Table(mfcTable).Select("CONCAT(model_package, "_", model_variant)").Where("model_package IS NOT NULL AND model_variant IS NOT NULL").Scan(&modelNames)

    if result.Error != nil {

        return nil, result.Error

    }

    return modelNames, nil

}


查看完整回答
反对 回复 2022-09-05
  • 1 回答
  • 0 关注
  • 300 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信