[英]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.