簡體   English   中英

使用 Gorm 查詢多列

[英]Querying for multiple columns with Gorm

我的數據庫包括以下列“model_package”和“model_variant”。 我嘗試通過在.Select() 中指定這兩個列來使用 Gorm 查詢數據庫,但是,我不斷收到掃描錯誤。 通常,當我 select 單列(即.Select("model_package") )時,它返回一個包含所有值的數組(切片),所以我假設它應該返回一個二維數組(切片)當我 select多列,如我下面的代碼中。

我的目標是將兩個字段組合成一個字符串。 例如,如果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 - 為您的 SELECT 查詢創建一個視圖 model 並返回它來處理您想要的。

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() function 進行連接。

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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM