Skip to main content

Scopes

Scopes 是基于 *gorm.DB 的可重用逻辑。

定义 Scopes

func AmountGreaterThan1000(db *gorm.DB) *gorm.DB {
return db.Where("amount > ?", 1000)
}

func PaidWithCreditCard(db *gorm.DB) *gorm.DB {
return db.Where("pay_mode_sign = ?", "C")
}

func PaidWithCod(db *gorm.DB) *gorm.DB {
return db.Where("pay_mode_sign = ?", "C")
}

func OrderStatus(status []string) func (db *gorm.DB) *gorm.DB {
return func (db *gorm.DB) *gorm.DB {
return db.Where("status IN (?)", status)
}
}

使用 Scopes

db.Scopes(AmountGreaterThan1000, PaidWithCreditCard).Find(&orders)
// 查找 amount > 1000 且 pay_mode_sign = 'C' 的订单

db.Scopes(AmountGreaterThan1000, OrderStatus([]string{"paid", "shipped"})).Find(&orders)
// 查找 amount > 1000 且 status 在 paid, shipped 中的订单