Many-to-Many Relationships
Ko'pdan-ko'pga bog'lanishlar
Ba'zan ikkita jadval bir-biriga ko'pdan-ko'p bog'lanadi: bitta talaba bir nechta kursga yozilishi mumkin, bitta kursda ham bir nechta talaba bo'lishi mumkin. Bu — kursning yakuniy, eng murakkab bog'lanish turi.
type Student struct {
ID uint
Name string
Courses []Course `gorm:"many2many:student_courses;"`
}
type Course struct {
ID uint
Title string
Students []Student `gorm:"many2many:student_courses;"`
}
func main() {
// ...
// GORM avtomatik "student_courses" oraliq jadvalini yaratadi (AutoMigrate orqali)
student := Student{Name: "Aziz"}
course := Course{Title: "Go Dasturlash"}
db.Create(&student)
db.Create(&course)
// Bog'lash — Append orqali:
db.Model(&student).Association("Courses").Append(&course)
var found Student
db.Preload("Courses").First(&found, student.ID)
fmt.Println(len(found.Courses)) // 1
}gorm:"many2many:student_courses;" tag'i — GORM'ga avtomatik ravishda oraliq jadval (student_courses, faqat ikkala tomonning ID'larini saqlaydigan) yaratishni buyuradi — bu klassik relyatsion baza dizayni, siz uni qo'lda yaratishingiz shart emas. Association("Courses").Append(...) — ikki yozuv orasiga yangi bog'lanish qo'shadi (oraliq jadvalga qator qo'shish o'rniga). Bu — butun kursda ko'rgan bog'lanish turlarining (Belongs To, Has Many) tabiiy davomi: Many-to-Many aslida ikkita Has Many'ning, oraliq jadval orqali, birlashmasi.
Key Takeaway
Key Takeaway:
gorm:"many2many:..." tag'i orqali GORM avtomatik oraliq jadval yaratadi; Association(...).Append(...) bilan bog'lanishlarni boshqarasiz.