GoDasturchi
Preloading Relations

Preloading Relations

Bog'lanishlarni oldindan yuklash (Preload)

Oldingi ikki darsda ko'rganingizdek, bog'langan ma'lumot standart holatda yuklanmaydi. Preload — "bu bog'lanishni ham birga yukla" deb GORM'ga aytadi.

example.go
var user User
db.Preload("Orders").First(&user, 1)
fmt.Println(len(user.Orders)) // endi Orders to'ldirilgan!

var order Order
db.Preload("User").First(&order, 1)
fmt.Println(order.User.Name) // endi User ham to'ldirilgan!

// Bir nechta bog'lanishni birga yuklash:
var orders []Order
db.Preload("User").Preload("Items").Find(&orders)

Preload("Orders") — struct maydonining nomini (satr sifatida) oladi, GORM turini emas. Ichki mexanizm: GORM avval asosiy so'rovni bajaradi, so'ng bog'langan ma'lumotlar uchun alohida qo'shimcha so'rov yuboradi va natijalarni birlashtiradi (bu "N+1 muammosi"ning oldini olish uchun samarali qilingan — bitta katta JOIN o'rniga, ikkita optimallashtirilgan so'rov). Preload chaqirilmasa, bog'langan maydon har doim bo'sh (zero value) qoladi — bu ushbu kursda ko'rgan eng ko'p uchraydigan chalkashlik manbai.

Key Takeaway

Key Takeaway:

Preload("MaydonNomi") bog'langan ma'lumotlarni avtomatik yuklaydi; buni chaqirmasangiz, bog'langan struct/slice bo'sh qoladi.

NEXT UP

Hooks and Callbacks

Preloading Relations

Bog'lanishlarni oldindan yuklash (Preload)

Oldingi ikki darsda ko'rganingizdek, bog'langan ma'lumot standart holatda yuklanmaydi. Preload — "bu bog'lanishni ham birga yukla" deb GORM'ga aytadi.

example.go
var user User
db.Preload("Orders").First(&user, 1)
fmt.Println(len(user.Orders)) // endi Orders to'ldirilgan!

var order Order
db.Preload("User").First(&order, 1)
fmt.Println(order.User.Name) // endi User ham to'ldirilgan!

// Bir nechta bog'lanishni birga yuklash:
var orders []Order
db.Preload("User").Preload("Items").Find(&orders)

Preload("Orders") — struct maydonining nomini (satr sifatida) oladi, GORM turini emas. Ichki mexanizm: GORM avval asosiy so'rovni bajaradi, so'ng bog'langan ma'lumotlar uchun alohida qo'shimcha so'rov yuboradi va natijalarni birlashtiradi (bu "N+1 muammosi"ning oldini olish uchun samarali qilingan — bitta katta JOIN o'rniga, ikkita optimallashtirilgan so'rov). Preload chaqirilmasa, bog'langan maydon har doim bo'sh (zero value) qoladi — bu ushbu kursda ko'rgan eng ko'p uchraydigan chalkashlik manbai.

Key Takeaway

Key Takeaway:

Preload("MaydonNomi") bog'langan ma'lumotlarni avtomatik yuklaydi; buni chaqirmasangiz, bog'langan struct/slice bo'sh qoladi.

NEXT UP

Hooks and Callbacks