ऐसा लगता है कि आपके पास जो कुछ है उसके साथ आप दो काम करना चाहेंगे:(1) मॉडल को अपडेट करें ताकि आपके पास सही संबंध बाध्यकारी हो, और (2) .Preload()
का उपयोग करें। विधि यदि आप डेटा को पढ़ने पर संबद्ध करने के लिए इसे प्राप्त करने का प्रयास कर रहे हैं।
मॉडल परिवर्तन
गोर्म स्वचालित रूप से आपकी संरचना में विशेषताओं के नाम और संदर्भित संरचना के नाम के आधार पर संबंधों का अनुमान लगाता है। समस्या यह है कि Google
GoogleAccount
. प्रकार की विशेषता संबद्ध नहीं है क्योंकि गोर्म एक type Google struct
की तलाश में है ।
आपके पास GoogleAccount
. पर एक विदेशी कुंजी भी नहीं है . ORM को कैसे पता चलेगा कि कौन सा GoogleAccount
किस Client
. के साथ संबद्ध करने के लिए ? आपको एक ClientId
जोड़ना चाहिए आपके GoogleAccount
. पर संरचना परिभाषा।
साथ ही, मैं uint
. टाइप करने के लिए आपके द्वारा उपयोग की जा रही प्राथमिक कुंजियों को बदल दूंगा चूंकि यह वही है जो गॉर्म डिफॉल्ट करता है (जब तक कि आपके पास इसका उपयोग न करने का कोई अच्छा कारण न हो)
अगर मैं तुम होते, तो मैं अपनी संरचना परिभाषाओं को निम्नलिखित में बदल देता:
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