Go Academy · पाठ

संबंध

संबंधों का मॉडल बनाएँ

पाठ 3, कुल 4 में से13 चरण

संबंध, CoddyKit पर Go Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Go Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Go Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

संबंधों का मॉडल बनाना

GORM के संबंध तालिकाओं के बीच के रिश्तों को संरचना के फ़ील्ड से जोड़ते हैं। चार प्रकार हैं: एक का होना, कई का होना, किसी से संबंधित होना और अनेक-से-अनेक।

  • विदेशी कुंजियों को संरचना के फ़ील्ड के रूप में व्यक्त करें
  • संबंधित डेटा अपने-आप लोड करें
  • संबंधित रिकॉर्ड साथ में बनाएँ

कई का संबंध

एक उपयोगकर्ता के कई पोस्ट हो सकते हैं। अभिभावक में बाल रिकॉर्ड का स्लाइस होता है और बाल रिकॉर्ड में अभिभावक की ओर लौटने वाली विदेशी कुंजी होती है।

type User struct {
    gorm.Model
    Name  string
    Posts []Post
}

type Post struct {
    gorm.Model
    Title  string
    UserID uint
}

किसी से संबंधित होना

बाल रिकॉर्ड के दृष्टिकोण से, एक पोस्ट किसी उपयोगकर्ता से संबंधित होती है। इसे व्यक्त करने के लिए User फ़ील्ड और UserID विदेशी कुंजी जोड़ें।

type Post struct {
    gorm.Model
    Title  string
    UserID uint
    User   User
}

एक का संबंध

एक-से-संबंध, कई-से-संबंध जैसा होता है, लेकिन इसमें केवल एक संबंधित रिकॉर्ड होता है, जैसे किसी उपयोगकर्ता की एक प्रोफ़ाइल होना। विदेशी कुंजी बाल रिकॉर्ड में होती है।

type User struct {
    gorm.Model
    Profile Profile
}

type Profile struct {
    gorm.Model
    UserID uint
    Bio    string
}

अनेक-से-अनेक

उपयोगकर्ता और भूमिकाएँ एक जॉइन तालिका के माध्यम से अनेक-से-अनेक रूप से संबंधित होती हैं। many2many टैग उस जॉइन तालिका का नाम देता है, जिसे Roles फ़ील्ड के बाद बैकटिक में gorm:"many2many:user_roles;" के रूप में लिखा जाता है।

type User struct {
    gorm.Model
    // Roles field tag: gorm:"many2many:user_roles;"
    Roles []Role
}

type Role struct {
    gorm.Model
    Name string
}

Preload

डिफ़ॉल्ट रूप से संबंधित डेटा लोड नहीं होता। Preload GORM को अलग क्वेरी में संबंध लाने के लिए कहता है, जिससे अलग से मैन्युअल खोज करने की आवश्यकता नहीं रहती।

var user User
db.Preload("Posts").First(&user, 1)
fmt.Println(len(user.Posts))

स्तरीकृत Preload

बिंदुयुक्त पथ से आप कई स्तरों के संबंधों को पहले से लोड कर सकते हैं और एक ही कॉल-श्रृंखला में उपयोगकर्ताओं के पोस्ट तथा प्रत्येक पोस्ट की टिप्पणियाँ लोड कर सकते हैं।

db.Preload("Posts.Comments").First(&user, 1)

चलाकर देखने योग्य संबंध का अनुकरण

GORM को डेटाबेस की आवश्यकता होती है, इसलिए यह चलाकर देखने योग्य उदाहरण मेमोरी में रखे गए स्लाइस का उपयोग करके कई-संबंध और पहले से लोड करने का मॉडल बनाता है।

package main

import "fmt"

type Post struct {
    ID     int
    UserID int
    Title  string
}

type User struct {
    ID    int
    Name  string
    Posts []Post
}

func preload(u *User, all []Post) {
    for _, p := range all {
        if p.UserID == u.ID {
            u.Posts = append(u.Posts, p)
        }
    }
}

func main() {
    u := User{ID: 1, Name: "Ada"}
    all := []Post{{1, 1, "Hello"}, {2, 1, "World"}, {3, 2, "Other"}}
    preload(&u, all)
    fmt.Printf("%s has %d posts\n", u.Name, len(u.Posts))
}

संबंधों के साथ बनाना

यदि आप Create से पहले स्लाइस फ़ील्ड निर्धारित करते हैं, तो GORM अभिभावक और उसके बाल रिकॉर्ड साथ में डालता है और विदेशी कुंजियों को अपने-आप जोड़ देता है।

user := User{Name: "Ada", Posts: []Post{{Title: "Hi"}}}
db.Create(&user)

N प्लस वन की समस्या

अभिभावक रिकॉर्ड पर लूप चलाकर हर बार उसके बाल रिकॉर्ड की क्वेरी करने से प्रत्येक अभिभावक के लिए एक क्वेरी चलती है, जिसे N+1 समस्या कहते हैं। Preload संबंधित डेटा को एक ही अतिरिक्त क्वेरी में समूहित करके इसे हल करता है।

संबंध मोड

Association API मैन्युअल विदेशी कुंजी प्रबंधन के बिना संबंधित रिकॉर्ड जोड़ता, बदलता, हटाता या साफ़ करता है। उदाहरण के लिए: db.Model(&user).Association("Posts").Append(&post)।

त्वरित जाँच

संबंधों से संबंधित अपनी जानकारी जाँचें।

पुनरावलोकन

आपने संबंधों के बारे में सीखा:

  • एक का होना, कई का होना, किसी से संबंधित होना और many2many मॉडल संबंध
  • विदेशी कुंजियाँ UserID जैसे संरचना फ़ील्ड होती हैं
  • Preload संबंधों को लोड करता है और N+1 समस्या से बचाता है
  • बाल रिकॉर्ड वाले अभिभावक को बनाने पर विदेशी कुंजियाँ जुड़ जाती हैं
  • संबंध मोड संबंधों को जोड़ता, बदलता या साफ़ करता है
शुरुआत निःशुल्क

एआई शिक्षक के साथ Go सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
51
पाठ
203

अक्सर पूछे जाने वाले प्रश्न

क्या “संबंध” पाठ निःशुल्क है?

हाँ — Go Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “संबंध” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Go Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“संबंध” में मैं क्या सीखूँगा?

संबंधों का मॉडल बनाएँ आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Go Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Go Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Go Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“संबंध” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Go Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Go Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. मॉडल और AutoMigrate
  2. CRUD संचालन
  3. संबंध
  4. Hooks और Scopes
← Go Academy पर वापस जाएँ