Изглежда, че ще искате да направите две неща с това, което имате:(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
}
За повече информация относно това, разгледайте документацията на асоциациите тук:https://gorm. io/associations.html#has-one
Предварително зареждане на асоциации
Сега, когато всъщност ги имате правилно свързани, можете да .Preload() вземете желания от вас вложен обект:
db.Preload("GoogleAccount").First(&user)
Използване на .Preload() ще попълни user.GoogleAccount атрибут с правилно свързания GoogleAccount въз основа на ClientId .
За повече информация относно това, разгледайте документацията за предварително зареждане:https://gorm .io/crud.html#preloading-eager-loading