sql >> Database >  >> RDS >> PostgreSQL

Genest object in structuur krijgen in gorm

Het lijkt erop dat je twee dingen wilt doen met wat je hebt:(1) het model bijwerken zodat je de juiste relatiebinding hebt, en (2) de .Preload() gebruiken methode als u probeert om het de gegevens bij het lezen te laten associëren.

Modelwijzigingen

Gorm leidt automatisch relaties af op basis van de naam van de attributen in uw struct en de naam van de struct waarnaar wordt verwezen. Het probleem is dat Google kenmerk van het type GoogleAccount koppelt niet omdat gorm op zoek is naar een type Google struct .

U mist ook een externe sleutel op GoogleAccount . Hoe weet de ORM welke GoogleAccount om te associëren met welke Client ? U moet een ClientId . toevoegen naar uw GoogleAccount structuurdefinitie.

Ik zou ook de primaire sleutels die u gebruikt om uint te typen, wijzigen want dat is waar Gorm standaard op ingesteld is (tenzij je een goede reden hebt om het niet te gebruiken)

Als ik jou was, zou ik mijn structuurdefinities als volgt wijzigen:

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
}

Voor meer informatie hierover, bekijk hier de associatiedocumentatie:http://gorm. io/associations.html#has-one

Associaties vooraf laden

Nu je ze echt goed gerelateerd hebt, kun je .Preload() verkrijg het geneste object dat u wilt:

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

Met behulp van .Preload() vult de user.GoogleAccount attribuut met het correct gekoppelde GoogleAccount gebaseerd op de ClientId .

Voor meer informatie hierover, bekijk de preloading documentatie:http://gorm .io/crud.html#preloading-eager-loading



  1. Hoe kan ik een MySQL-query stoppen als het te lang duurt?

  2. ID's opslaan als door komma's gescheiden waarden

  3. kolom niet null uitstelbaar

  4. Hoe kan ik mijn programma waarschuwen als er een specifieke databasetabel is toegevoegd/bijgewerkt/verwijderd?