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 中的订单