Categories: GoFrame 教程

GoFrame 链式操作-Handler特性

Handler​特性允许您轻松地复用常见的逻辑。

示例1,查询

func AmountGreaterThan1000(m *gdb.Model) *gdb.Model {
 return m.WhereGT("amount", 1000)
}

func PaidWithCreditCard(m *gdb.Model) *gdb.Model {
 return m.Where("pay_mode_sign", "credit_card")
}

func PaidWithCod(m *gdb.Model) *gdb.Model {
 return m.Where("pay_mode_sign", "cod")
}

func OrderStatus(statuses []string) func(m *gdb.Model) *gdb.Model {
 return func(m *gdb.Model) *gdb.Model {
  return m.Where("status", statuses)
 }
}

var (
 m = g.Model("product_order")
)

m.Handler(AmountGreaterThan1000, PaidWithCreditCard).Scan(&orders)
// SELECT * FROM `product_order` WHERE `amount`>1000 AND `pay_mode_sign`=credit_card
// 查找所有金额大于 1000 的信用卡订单

m.Handler(AmountGreaterThan1000, PaidWithCod).Scan(&orders)
// SELECT * FROM `product_order` WHERE `amount`>1000 AND `pay_mode_sign`=cod
// 查找所有金额大于 1000 的 COD 订单

m.Handler(AmountGreaterThan1000, OrderStatus([]string{"paid", "shipped"})).Scan(&orders)
// SELECT * FROM `product_order` WHERE `amount`>1000 AND `status` IN(paid,shipped)
// 查找所有金额大于1000 的已付款或已发货订单

示例2,分页

func Paginate(r *ghttp.Request) func(m *gdb.Model) *gdb.Model {
 return func(m *gdb.Model) *gdb.Model {
  type Pagination struct {
   Page int
   Size int
  }
  var pagination Pagination
  _ = r.Parse(&pagination)
  switch {
  case pagination.Size > 100:
   pagination.Size = 100

  case pagination.Size <= 0:
   pagination.Size = 10
  }
  return m.Page(pagination.Page, pagination.Size)
 }
}

m.Handler(Paginate(r)).Scan(&users)
m.Handler(Paginate(r)).Scan(&articles)

admin

这个人很懒,什么都没有留下~

Share
Published by
admin

Recent Posts

聊聊vue3中的defineProps

在Vue 3中,defineP…

1 周 ago

在 Chrome 中删除、允许和管理 Cookie

您可以选择删除现有 Cooki…

2 周 ago

自定义指令:聊聊vue中的自定义指令应用法则

今天我们来聊聊vue中的自定义…

3 周 ago

聊聊Vue中@click.stop和@click.prevent

一起来学下聊聊Vue中@cli…

4 周 ago

Nginx 基本操作:启动、停止、重启命令。

我们来学习Nginx基础操作:…

1 月 ago

Vue3:手动清理keep-alive组件缓存的方法

Vue3中手动清理keep-a…

1 月 ago