扫描到gorm模型的结构

时间:2016-10-12 14:02:55

标签: go go-gorm

我试图将查询结果扫描到由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手动尝试时)但它们未正确映射。

这是可能的,还是一个蠕虫病毒。

代码:

package main

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)
    }
}

1 个答案:

答案 0 :(得分:0)

您可以使用多个扫描。

例如

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)
 }
}