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