sql >> Database teknologi >  >> RDS >> PostgreSQL

Få indlejret objekt i struktur i Gorm

Det ser ud til, at du vil gøre to ting med det, du har:(1) opdatere modellen, så du har den rigtige relationsbinding, og (2) brug .Preload() metode, hvis du forsøger at få den til at knytte dataene ved læsning.

Modelændringer

Gorm udleder automatisk relationer baseret på navnet på attributterne i din struktur og navnet på den refererede struktur. Problemet er, at Google attribut af typen GoogleAccount forbinder ikke, fordi gorm leder efter en type Google struct .

Du mangler også en fremmednøgle på GoogleAccount . Hvordan ville ORM'en vide, hvilken GoogleAccount at associere med hvilken Client ? Du skal tilføje et ClientId til din GoogleAccount strukturdefinition.

Jeg ville også ændre de primære nøgler, du bruger, til at skrive uint da det er det, gorm er standard til (medmindre du har en god grund til ikke at bruge det)

Hvis jeg var dig, ville jeg ændre mine strukturdefinitioner til følgende:

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
}

For mere information om dette, tag et kig på foreningens dokumentation her:http://gorm. io/associations.html#has-one

Forudindlæser tilknytninger

Nu hvor du faktisk har dem korrekt relateret, kan du .Preload() få det indlejrede objekt, du ønsker:

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

Brug af .Preload() vil udfylde user.GoogleAccount attribut med den korrekt tilknyttede GoogleAccount baseret på ClientId .

For mere information om dette, tag et kig på forhåndsindlæsningsdokumentationen:http://gorm .io/crud.html#preloading-eager-loading



  1. Entity Framework-guiden går ned på MySQL

  2. SQL Server rekursiv selvtilslutning

  3. MySQL SELECT id for række, hvor STØRSTE af MAX indgange i flere kolonner

  4. Postgresql 9.4-forespørgslen bliver gradvist langsommere, når du tilslutter TSTZRANGE med &&