1

我正在尝试将查询结果扫描到由 gorm 模型组成的结果结构中。

代码构建并且查询通过,但结果数组包含如下默认值:

{{0 0 0 0 0 0 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC 0 0001-01-01 00:00:00 +0000 UTC { false}} {0 0 0 0 {0 false} {0 false} {0 false} 0001-01-01 00:00:00 +0000 UTC false {0 false} {0 false} { false} { false}}}

此外,结果数组具有查询结果应具有的确切长度(当我通过 pgadmin 手动尝试时),但它们未正确映射。

这是可能的还是它是一个gorm bug。

代码:

包主

import (
    "fmt"
    "test/model"
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/postgres"
)

type Result struct {
    model1    model.model1
    model2    model.model2
}

func main() {
    var result []Result
    var err error

    db, err := gorm.Open("postgres", "bla")
    defer db.Close()

    err = db.Raw(`SELECT t1.*, t2.*
                  FROM   t1
                   INNER JOIN t2 on something
                  WHERE something`).Scan(&result).Error

    for _, element := range result {
        fmt.Println(element)
    }
}
4

1 回答 1

3

您可以使用多个扫描。

例如

type Dto1 struct {
    model1   model.model1
}

type Dto2 struct {
    model2    model.model2
}

func main() {

var dto1 []Dto1
var dto2 []Dto2
var err error

db, err := gorm.Open("postgres", "bla")
defer db.Close()

err = db.Raw(`SELECT t1.*, t2.*
              FROM   t1
               INNER JOIN t2 on something
              WHERE something`).Scan(&dto1).Scan(&dto2).Error

for _, element := range result {
    fmt.Println(element)
 }
}
于 2019-01-30T09:15:11.210 回答