Сканирование в структуру моделей gorm

#go #go-gorm

#Вперед #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), но они отображаются неправильно.

Возможно ли это или это ошибка gorm.

Код:

основной пакет

 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(amp;result).Error

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

Комментарии:

1. Пожалуйста, предоставьте таблицу и структуру go? Возможно, имя поля задано неправильно

2. имена определенно заданы правильно, потому что, если я сканирую каждую модель по отдельности, она работает.

Ответ №1:

Вы можете использовать многократное сканирование.

например

 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(amp;dto1).Scan(amp;dto2).Error

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