Có vẻ như bạn sẽ muốn thực hiện hai việc với những gì bạn có:(1) cập nhật mô hình để bạn có mối quan hệ ràng buộc phù hợp và (2) sử dụng .Preload()
nếu bạn đang cố gắng lấy nó để liên kết dữ liệu khi đọc.
Thay đổi mô hình
Gorm tự động suy ra các mối quan hệ dựa trên tên của các thuộc tính trong cấu trúc của bạn và tên của cấu trúc được tham chiếu. Vấn đề là Google
thuộc tính của loại GoogleAccount
không liên kết vì gorm đang tìm kiếm type Google struct
.
Bạn cũng thiếu khóa ngoại trên GoogleAccount
. Làm cách nào ORM biết được GoogleAccount
nào để liên kết với Client
nào ? Bạn nên thêm một ClientId
vào GoogleAccount
của bạn định nghĩa cấu trúc.
Ngoài ra, tôi sẽ thay đổi các khóa chính bạn đang sử dụng để nhập uint
vì đó là những gì gorm mặc định (trừ khi bạn có lý do chính đáng để không sử dụng nó)
Nếu tôi là bạn, tôi sẽ thay đổi định nghĩa cấu trúc của mình thành như sau:
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
}
Để biết thêm thông tin về điều này, hãy xem tài liệu liên kết tại đây: http:// gorm. io / Association.html # has-one
Tải trước các liên kết
Bây giờ bạn đã thực sự có liên quan đúng đắn với chúng, bạn có thể .Preload()
lấy đối tượng lồng nhau mà bạn muốn:
db.Preload("GoogleAccount").First(&user)
Sử dụng .Preload()
sẽ điền user.GoogleAccount
thuộc tính với GoogleAccount
được liên kết chính xác dựa trên ClientId
.
Để biết thêm thông tin về điều này, hãy xem tài liệu tải trước: http:// gorm .io / crud.html # preloading-wish-loading