PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Вземете вложен обект в структура в gorm

Изглежда, че ще искате да направите две неща с това, което имате:(1) актуализирайте модела, така че да имате правилното свързване на връзката, и (2) използвайте .Preload() метод, ако се опитвате да го накарате да асоциира данните при четене.

Промени в модела

Gorm автоматично извежда връзки въз основа на името на атрибутите във вашата структура и името на препратената структура. Проблемът е, че Google атрибут от тип GoogleAccount не се асоциира, защото gorm търси type Google struct .

Липсва ви и външен ключ в GoogleAccount . Как ORM ще знае кой GoogleAccount за асоцииране с кой Client ? Трябва да добавите ClientId към вашия GoogleAccount дефиниция на структура.

Освен това бих променил първичните ключове, които използвате за въвеждане на uint тъй като това е, което gorm има по подразбиране (освен ако нямате основателна причина да не го използвате)

Ако бях на ваше място, щях да променя дефинициите на структурата си на следното:

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
}

За повече информация относно това, разгледайте документацията на асоциациите тук:http://gorm. io/associations.html#has-one

Предварително зареждане на асоциации

Сега, когато всъщност ги имате правилно свързани, можете да .Preload() вземете желания от вас вложен обект:

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

Използване на .Preload() ще попълни user.GoogleAccount атрибут с правилно свързания GoogleAccount въз основа на ClientId .

За повече информация относно това, разгледайте документацията за предварително зареждане: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. Връщане в pg-promise

  2. Показване на изображение от база данни PostgreSQL, bytea

  3. Декларирайте колона от масив от тип 'not-null-string' в PostgreSQL

  4. Subsonic postgreSQL шаблон

  5. Как изрично да прехвърляте тип литерал на масив в sqlalchemy с помощта на postgresql?