Sepertinya Anda ingin melakukan dua hal dengan apa yang Anda miliki:(1) perbarui model sehingga Anda memiliki ikatan hubungan yang tepat, dan (2) gunakan .Preload()
metode jika Anda mencoba membuatnya mengaitkan data yang sedang dibaca.
Perubahan Model
Gorm secara otomatis menyimpulkan hubungan berdasarkan nama atribut di struct Anda dan nama struct yang direferensikan. Masalahnya adalah Google
atribut tipe GoogleAccount
tidak terasosiasi karena gorm sedang mencari type Google struct
.
Anda juga kehilangan kunci asing di GoogleAccount
. Bagaimana ORM mengetahui GoogleAccount
. yang mana untuk dikaitkan dengan Client
. mana ? Anda harus menambahkan ClientId
ke GoogleAccount
. Anda definisi struktur.
Juga, saya akan mengubah kunci utama yang Anda gunakan untuk mengetik uint
karena itulah yang menjadi default gorm (kecuali jika Anda memiliki alasan kuat untuk tidak menggunakannya)
Jika saya jadi Anda, saya akan mengubah definisi struct saya menjadi berikut:
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
}
Untuk informasi lebih lanjut tentang ini, lihat dokumentasi asosiasi di sini:http://gorm. io/associations.html#has-one
Asosiasi pramuat
Sekarang setelah Anda benar-benar menghubungkannya dengan benar, Anda dapat .Preload()
dapatkan objek bersarang yang Anda inginkan:
db.Preload("GoogleAccount").First(&user)
Menggunakan .Preload()
akan mengisi user.GoogleAccount
atribut dengan GoogleAccount
yang terkait dengan benar berdasarkan ClientId
.
Untuk informasi lebih lanjut tentang ini, lihat dokumentasi pramuat:http://gorm .io/crud.html#preloading-eager-loading