GoDasturchi
Hooks and Callbacks

Hooks and Callbacks

Hook va callback'lar

GORM modelга maxsus nomli metod qo'shsangiz, GORM uni tegishli amaldan oldin yoki keyin avtomatik chaqiradi — bu "hook" (ilgak) deyiladi. Eng ko'p ishlatiladigani: BeforeCreate.

example.go
import (
	"errors"
	"gorm.io/gorm"
)

type User struct {
	ID    uint
	Name  string
	Email string
}

// BeforeCreate — Create chaqirilishidan OLDIN avtomatik ishga tushadi
func (u *User) BeforeCreate(tx *gorm.DB) error {
	if u.Email == "" {
		return errors.New("email bo'sh bo'lishi mumkin emas")
	}
	return nil
}

// AfterCreate — Create MUVAFFAQIYATLI bo'lgach ishga tushadi
func (u *User) AfterCreate(tx *gorm.DB) error {
	fmt.Println("yangi foydalanuvchi yaratildi:", u.ID)
	return nil
}

BeforeCreate xato (error) qaytarsa, GORM yozuvni umuman yaratmaydi — bu validatsiyani markazlashtirish uchun juda qulay (har safar Create chaqirilgan joyda alohida tekshirish shart emas). Boshqa mashhur hook'lar: BeforeUpdate, BeforeDelete, AfterFind. Bu naqsh — "Test Fixtures and Helpers" darsida ko'rgan t.Cleanup() g'oyasiga o'xshaydi: "bu voqea sodir bo'lganda, avtomatik shu kodni ham bajar".

Key Takeaway

Key Takeaway:

BeforeCreate, AfterCreate kabi hook metodlari GORM tomonidan avtomatik chaqiriladi — validatsiya va yon ta'sirlarni markazlashtirish uchun ishlatiladi.

NEXT UP

Transactions

Hooks and Callbacks

Hook va callback'lar

GORM modelга maxsus nomli metod qo'shsangiz, GORM uni tegishli amaldan oldin yoki keyin avtomatik chaqiradi — bu "hook" (ilgak) deyiladi. Eng ko'p ishlatiladigani: BeforeCreate.

example.go
import (
	"errors"
	"gorm.io/gorm"
)

type User struct {
	ID    uint
	Name  string
	Email string
}

// BeforeCreate — Create chaqirilishidan OLDIN avtomatik ishga tushadi
func (u *User) BeforeCreate(tx *gorm.DB) error {
	if u.Email == "" {
		return errors.New("email bo'sh bo'lishi mumkin emas")
	}
	return nil
}

// AfterCreate — Create MUVAFFAQIYATLI bo'lgach ishga tushadi
func (u *User) AfterCreate(tx *gorm.DB) error {
	fmt.Println("yangi foydalanuvchi yaratildi:", u.ID)
	return nil
}

BeforeCreate xato (error) qaytarsa, GORM yozuvni umuman yaratmaydi — bu validatsiyani markazlashtirish uchun juda qulay (har safar Create chaqirilgan joyda alohida tekshirish shart emas). Boshqa mashhur hook'lar: BeforeUpdate, BeforeDelete, AfterFind. Bu naqsh — "Test Fixtures and Helpers" darsida ko'rgan t.Cleanup() g'oyasiga o'xshaydi: "bu voqea sodir bo'lganda, avtomatik shu kodni ham bajar".

Key Takeaway

Key Takeaway:

BeforeCreate, AfterCreate kabi hook metodlari GORM tomonidan avtomatik chaqiriladi — validatsiya va yon ta'sirlarni markazlashtirish uchun ishlatiladi.

NEXT UP

Transactions