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