Używam Gorm i Golang, aby pobrać dane z mojej bazy danych. Czy możliwe jest, aby Gorm pobiera również dzieci dla dzieci (klucze obce)?

tabele bazy danych

users
+----+---------+------------+
| id | name    | country_id |
+----+---------+------------+
|  1 | Adam    |          1 |
|  2 | Bertil  |          1 |
|  3 | Charlie |          2 |
+----+---------+------------+

countries
+----+--------+
| id | name   |
+----+--------+
|  1 | Sweden |
|  2 | Norway |
+----+--------+

Modele

type User struct {
    Id        int64   `json:"-"`
    Name      string  `json:"name"`
    CountryId int64   `json:"-"`
    Country   Country `json:"country"`
}

type Country struct {
    Id   int64  `json:"-"`
    Name string `json:"name"`
}

kod, aby pobrać wszystkich użytkowników

var users []User
DB.Find(&users) // Question: How should this be modified to automatically fetch the Country?

rzeczywisty wynik

[
    {
        "name": "Adam",
        "country" : {
            "name": "",
        }
    },
    ...
]

Oczekiwany wynik

[
    {
        "name": "Adam",
        "country" : {
            "name": "Sweden",
        }
    },
    ...
]

Bardzo dziękuję za was!

/ Klarre.

0
Klarre 14 kwiecień 2021, 15:48

1 odpowiedź

Najlepsza odpowiedź

Tak, jest to możliwe, nazywa się to Preloading.

users := make([]User,0)
DB.Preload("Country").Find(&users) 
1
Christian 14 kwiecień 2021, 13:18