sql >> Databasteknik >  >> RDS >> PostgreSQL

Få kapslade objekt i struktur i Gorm

Det verkar som att du vill göra två saker med det du har:(1) uppdatera modellen så att du har rätt relationsbindning och (2) använd .Preload() metod om du försöker få den att associera data vid läsning.

Modelländringar

Gorm härleder automatiskt relationer baserat på namnet på attributen i din struktur och namnet på den refererade strukturen. Problemet är att Google attribut av typen GoogleAccount associerar inte eftersom gorm letar efter en type Google struct .

Du saknar också en främmande nyckel på GoogleAccount . Hur skulle ORM veta vilket GoogleAccount att associera med vilken Client ? Du bör lägga till ett ClientId till ditt GoogleAccount strukturdefinition.

Jag skulle också ändra de primärnycklar du använder för att skriva uint eftersom det är vad gorm använder som standard (om du inte har en bra anledning att inte använda det)

Om jag var du skulle jag ändra mina strukturdefinitioner till följande:

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
}

För mer information om detta, ta en titt på föreningens dokumentation här:http://gorm. io/associations.html#has-one

Förladdning av associationer

Nu när du faktiskt har dem korrekt relaterade kan du .Preload() hämta det kapslade objekt du vill ha:

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

Använder .Preload() kommer att fylla i user.GoogleAccount attribut med det korrekt associerade GoogleAccount baserat på ClientId .

För mer information om detta, ta en titt på förladdningsdokumentationen:http://gorm .io/crud.html#preloading-eager-loading



  1. ENUM (Enumeration) Datatyp i MySQL:Topp 12 fakta och användbara tips

  2. Hur man visar alla tabellnamn från en viss mysql-databas i php

  3. Zend Database Senaste ID för den infogade raden. (Använder postgres)

  4. SQL ORDER BY flera kolumner