PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Uzyskaj zagnieżdżony obiekt w strukturze w gorm

Wygląda na to, że będziesz chciał zrobić dwie rzeczy z tym, co masz:(1) zaktualizować model, aby uzyskać właściwe powiązanie relacji i (2) użyć .Preload() metoda, jeśli próbujesz skojarzyć dane podczas odczytu.

Zmiany modelu

Gorm automatycznie wnioskuje relacje na podstawie nazwy atrybutów w Twojej strukturze i nazwy struktury, do której się odwołuje. Problem polega na tym, że Google atrybut typu GoogleAccount nie kojarzy się, ponieważ gorm szuka type Google struct .

Brakuje Ci też klucza obcego na GoogleAccount . Skąd ORM miałby wiedzieć, które GoogleAccount skojarzyć z którym Client ? Powinieneś dodać ClientId na Twoje GoogleAccount definicja struktury.

Ponadto zmieniłbym klucze podstawowe, których używasz do wpisywania uint ponieważ domyślnie jest to gorm (chyba że masz dobry powód, aby go nie używać)

Gdybym był tobą, zmieniłbym moje definicje struktur na następujące:

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
}

Aby uzyskać więcej informacji na ten temat, zapoznaj się z dokumentacją stowarzyszenia tutaj:http://gorm. io/associations.html#has-one

Wstępne ładowanie powiązań

Teraz, gdy już masz je właściwie powiązane, możesz .Preload() pobierz żądany obiekt zagnieżdżony:

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

Używanie .Preload() wypełni user.GoogleAccount atrybut z poprawnie powiązanym GoogleAccount na podstawie ClientId .

Więcej informacji na ten temat można znaleźć w dokumentacji dotyczącej wstępnego ładowania:http://gorm .io/crud.html#preloading-eager-loading



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. jak utworzyć wyzwalacz zdarzenia dla tworzenia tabeli lub wybrać do

  2. Jak mogę wstawić wspólne dane do tabeli tymczasowej z różnych schematów?

  3. Python 3.7 psycopg2 - Błąd błędu Xcode:polecenie 'gcc' nie powiodło się ze statusem wyjścia 1

  4. brak wpisu pg_hba.conf dla hosta

  5. Czy wszystkie grupy mają równą całkowitą moc dla danej podgrupy?