sql >> Databáze >  >> RDS >> PostgreSQL

Získejte vnořený objekt ve struktuře v gormu

Vypadá to, že s tím, co máte, budete chtít udělat dvě věci:(1) aktualizovat model, abyste měli správnou vazbu vztahu, a (2) použít .Preload() Pokud se snažíte přimět jej k přiřazení dat při čtení.

Změny modelu

Gorm automaticky odvodí vztahy na základě názvu atributů ve vaší struktuře a názvu odkazované struktury. Problém je v tom, že Google atribut typu GoogleAccount nesdružuje, protože gorm hledá type Google struct .

V účtu GoogleAccount vám také chybí cizí klíč . Jak by ORM věděl, který GoogleAccount přiřadit ke kterému Client ? Měli byste přidat ClientId do vašeho GoogleAccount definice struktury.

Také bych změnil primární klíče, které používáte pro psaní uint protože to je výchozí nastavení gorm (pokud nemáte dobrý důvod to nepoužívat)

Být vámi, změnil bych své definice struktur na následující:

type Client struct {
     IdClient       uint            `gorm:"primary_key"`
     Name           string
     PhotoUrl       string
     ApprovalNumber uint16
     Phone          string
     Password       string
     HoursOfNotice  int8
     GoogleAccount  GoogleAccount    // Change this to `GoogleAccount`, the same name of your struct
}

type GoogleAccount struct {
     Id             uint
     ClientId       uint             // Foreign key
     Token          string
}

Další informace o tomto najdete v dokumentaci asociací zde:http://gorm. io/associations.html#has-one

Předběžné načítání přidružení

Nyní, když je skutečně správně souvisí, můžete .Preload() získejte požadovaný vnořený objekt:

db.Preload("GoogleAccount").First(&user)

Pomocí .Preload() vyplní user.GoogleAccount atribut se správně přidruženým GoogleAccount na základě ClientId .

Další informace o tomto naleznete v dokumentaci k předběžnému načítání:http://gorm .io/crud.html#preloading-eager-loading



  1. Jak zkopíruji IMPORT souboru json do postgresu?

  2. Sledování na úrovni sloupců a řádků při slučovací replikaci

  3. Alternativní syntaxe fulltextového vyhledávání MySQL

  4. Jak se mohu připojit k externí databázi z příkazu SQL nebo uložené procedury?