GoDasturchi
Many-to-Many Relationships

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.

example.go
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.

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.

example.go
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.