请教一种查询场景的实现

infoBrainSys · 2023-02-14 14:43:53 · 2258 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2023-02-14 14:43:53 的主题,其中的信息可能已经有所发展或是发生改变。

  • 框架:Gin,Gorm
  • 数据库中使用gorm映射了表单 Person
    type Person struct{
      *gorm.Model
      Name string
      Gender string
      Phone string
      QQ string
      Orders []Order    // 关联表
      ... 
    }
    
  • 当前端发起GET请求时,用户传入参数数量不固定,当拿到这些参数时,则去数据库查询对比,如果参数与数据库中匹配,则返回Person表与其所有关联表的数据。这种场景应该如何实现呢?一两个参数还能使用for循环嵌套,一旦数据量大的话这样会严重影响性能。

    请指点一种实现方法,当然如果有demo那更佳感激~


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2258 次点击  
加入收藏 微博
3 回复  |  直到 2023-02-20 15:42:55
lxzan
lxzan · #1 · 2年之前

给你个demo看看

type Person struct{
  *gorm.Model
  Name string
  Gender string
  Phone string
  QQ string
  Orders []Order    
}

func (c *Person) GetFilter(string, []interface{})  {
  var keys = make([]string, 0)
    var vals = make([]interface{}, 0)
  if c.Name != "" {
        keys = append(keys, "name = ?")
        vals = append(vals, c.Name)
    }

  if len(keys) == 0 {
        return "1=1", vals
    }
    return strings.Join(keys, " and "), vals
}
xwszt
xwszt · #2 · 2年之前

这位兄弟,你真的懒得不看官方的文档呀

关于你这个问题: 第一步:将前端提交的数据映射到一个struct;

type ReqForm struct{
   Name string `json:"name"`
  Gender string `json:"gender"`
  Phone string `json:"phone"`
  QQ string `json:"qq"`
  OrderIds []int `json:"orderIds"`
}

第二步:将映射struct作为参数到数据库里检索即可;db.Where(struct).Find(&person);

zhang-jianqiang
zhang-jianqiang · #3 · 2年之前

几十个几乎没啥影响

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传