假设我有一个实体学生。我想创建一个通用的过滤器,它可以接受多个参数,并根据这些参数返回结果。例如,我应该能够找到10岁的学生,他们的班主任是XYZ等。
到目前为止,这是我的代码
过滤器类如下所示
type MyCustomerFilter struct {
Age int
ClassTeacher string
Names []string // This is what I want to support
}
filters := make(map[string]interface{})
if myCustomFilter.Age > 0 {
filters["student.age"] = myCustomFilter.Age
}
if len(myCustomFilter.Names) > 0 {
filters["student.name IN ?"] = myCustomFilter.Names // This is not working
}
读取数据库的代码如下所示
db.Table("student").
Joins(...).
Where(filters).
Select(...)
...
在这里,“年龄”过滤器按预期正常工作,但我无法制定如何在给定的值数组中搜索值。我上面写的代码是有效的。另外,我在网上找不到其他的例子。
if len(myCustomFilter.Names) > 0 {
filters["student.name IN ?"] = myCustomFilter.Names // This is not working
}
1条答案
按热度按时间8i9zcol21#
比我想象的要简单,我想多了。
我只需要赋值,而不管是数组还是单个值,Gorm将自动负责在目标是数组时将查询转换为
WHERE value in (...)
,在值是单个值时将查询转换为WHERE VALUE = ...
。我只是修改了我的代码如下,它的工作。