Gorm:查找给定数组中列值所在的行

5t7ly7z5  于 11个月前  发布在  Go
关注(0)|答案(1)|浏览(127)

假设我有一个实体学生。我想创建一个通用的过滤器,它可以接受多个参数,并根据这些参数返回结果。例如,我应该能够找到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
}
8i9zcol2

8i9zcol21#

比我想象的要简单,我想多了。
我只需要赋值,而不管是数组还是单个值,Gorm将自动负责在目标是数组时将查询转换为WHERE value in (...),在值是单个值时将查询转换为WHERE VALUE = ...
我只是修改了我的代码如下,它的工作。

if len(myCustomFilter.Names) > 0 {
    filters["student.name"] = myCustomFilter.Names  // This is not working
}

相关问题