假设我们必须对一堆数据库记录执行搜索,搜索条件由几个复选框和文本字段定义。因此,如果选中“US Citizen”复选框,则文本字段“name”填充“John Doe”。然后我在Grails应用程序中的搜索将是:
def results = IndividualRecord.findAllWhere(citizenship: 'US', name: 'John Doe')
现在,如果有人也检查“选民”框,那么我会将搜索更改为:
def results = IndividualRecord.findAllWhere(citizenship: US, name: 'John Doe', voter: true)
实际上我的应用程序有几个文本字段和6个复选框。显然,我不能根据每个不同的标准组合编写自定义搜索功能,只有太多的组合。什么是解决这个问题的有效方法?所以,我想理想情况下会有一个搜索功能可以接受自定义查询参数并搜索这些参数。我有点迷茫和迷茫。任何帮助表示赞赏。
答案 0 :(得分:1)
实际上我的应用程序有几个文本字段和6个复选框。显然我不能根据每种不同的标准组合编写自定义搜索功能,而且组合太多了
你真的不需要关心处理这些组合。如果您可以将字段名称和值作为地图接收,则只需将地图传递给findAllWhere
,例如
def search(Map predicates) {
IndividualRecord.findAllWhere(predicates)
}
如果由于某种原因你不喜欢这种方法,你可以使用标准查询,例如。
def search(Map predicates) {
IndividualRecord.withCriteria {
if (predicates.voter != null) {
eq 'voter', predicates.voter
}
if (predicates.citizenship) {
eq 'citizenship', predicates.citizenship
}
if (predicates.name) {
eq 'name', predicates.name
}
}
}