- 框架:Gin,Gorm
- 数据库中使用`gorm`映射了表单 Person
```go
type Person struct{
*gorm.Model
Name string
Gender string
Phone string
QQ string
Orders []Order // 关联表
...
}
```
- 当前端发起`GET`请求时,用户传入参数数量不固定,当拿到这些参数时,则去数据库查询对比,如果参数与数据库中匹配,则返回`Person`表与其所有关联表的数据。这种场景应该如何实现呢?一两个参数还能使用`for`循环嵌套,一旦数据量大的话这样会严重影响性能。
>请指点一种实现方法,当然如果有demo那更佳感激~
更多评论
给你个demo看看
```go
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
}
```
#1
这位兄弟,你真的懒得不看官方的文档呀
关于你这个问题:
第一步:将前端提交的数据映射到一个struct;
```go
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);
#2