猿问

使用 Gorm 查询多个列

我的数据库包括以下列,“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


慕桂英546537
浏览 301回答 1
1回答

郎朗坤

您可以尝试以下几个选项:选项 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}
随时随地看视频慕课网APP

相关分类

Go
我要回答