GoDasturchi
Scopes and Joins

Scopes and Joins

Scope'lar va Join'lar

"Scope" — takrorlanadigan so'rov qismini (masalan "faqat faol foydalanuvchilar") qayta ishlatiladigan funksiyaga chiqarish naqshi. Joins esa boshqa jadval bilan bog'lab so'rash uchun.

example.go
// Scope — qayta ishlatiladigan so'rov qismi
func ActiveUsers(db *gorm.DB) *gorm.DB {
	return db.Where("active = ?", true)
}

func RecentFirst(db *gorm.DB) *gorm.DB {
	return db.Order("created_at desc")
}

var users []User
db.Scopes(ActiveUsers, RecentFirst).Find(&users)

// Joins — boshqa jadval bilan bog'lab so'rash
var orders []Order
db.Joins("JOIN users ON users.id = orders.user_id").
	Where("users.age > ?", 18).
	Find(&orders)

Scope — oddiy funksiya, *gorm.DB oladi va o'zgartirilgan *gorm.DB qaytaradi ("Accept Interfaces, Return Structs" darsidagi kabi zanjirlanadigan naqsh). db.Scopes(A, B) bir nechta scope'ni birlashtiradi — bu "Middleware: Logging and Chaining" darsidagi middleware zanjirlashga juda o'xshaydi, faqat HTTP handler emas, so'rov qurish uchun. Joins esa Preloaddan farqli — natijani bitta SQL so'rovda (haqiqiy SQL JOIN bilan) oladi, ikkita alohida so'rov emas.

Key Takeaway

Key Takeaway:

Scope'lar takrorlanuvchi so'rov mantiqini qayta ishlatiladigan qiladi; Joins esa bir nechta jadvalni bitta SQL so'rovida birlashtiradi.

NEXT UP

Many-to-Many Relationships

Scopes and Joins

Scope'lar va Join'lar

"Scope" — takrorlanadigan so'rov qismini (masalan "faqat faol foydalanuvchilar") qayta ishlatiladigan funksiyaga chiqarish naqshi. Joins esa boshqa jadval bilan bog'lab so'rash uchun.

example.go
// Scope — qayta ishlatiladigan so'rov qismi
func ActiveUsers(db *gorm.DB) *gorm.DB {
	return db.Where("active = ?", true)
}

func RecentFirst(db *gorm.DB) *gorm.DB {
	return db.Order("created_at desc")
}

var users []User
db.Scopes(ActiveUsers, RecentFirst).Find(&users)

// Joins — boshqa jadval bilan bog'lab so'rash
var orders []Order
db.Joins("JOIN users ON users.id = orders.user_id").
	Where("users.age > ?", 18).
	Find(&orders)

Scope — oddiy funksiya, *gorm.DB oladi va o'zgartirilgan *gorm.DB qaytaradi ("Accept Interfaces, Return Structs" darsidagi kabi zanjirlanadigan naqsh). db.Scopes(A, B) bir nechta scope'ni birlashtiradi — bu "Middleware: Logging and Chaining" darsidagi middleware zanjirlashga juda o'xshaydi, faqat HTTP handler emas, so'rov qurish uchun. Joins esa Preloaddan farqli — natijani bitta SQL so'rovda (haqiqiy SQL JOIN bilan) oladi, ikkita alohida so'rov emas.

Key Takeaway

Key Takeaway:

Scope'lar takrorlanuvchi so'rov mantiqini qayta ishlatiladigan qiladi; Joins esa bir nechta jadvalni bitta SQL so'rovida birlashtiradi.

NEXT UP

Many-to-Many Relationships