【问题标题】:Grails how to dynamically search based on varying search parametersGrails 如何根据不同的搜索参数进行动态搜索
【发布时间】:2014-08-02 21:22:22
【问题描述】:

假设我们必须对一堆数据库记录执行搜索,搜索条件由几个复选框和一个文本字段定义。因此,如果选中“美国公民”复选框并且文本字段“姓名”填充为“John Doe”。然后我在 Grails 应用程序中的搜索将类似于:

def results = IndividualRecord.findAllWhere(citizenship: 'US', name: 'John Doe')

现在,如果有人也选中了“投票者”框,那么我会将搜索更改为:

def results = IndividualRecord.findAllWhere(citizenship: US, name: 'John Doe', voter: true)

实际上,我的应用程序有几个文本字段和 6 个复选框。显然,我无法根据每个不同的标准组合编写自定义搜索功能,组合太多了。解决这个问题的有效方法是什么?所以,我想理想情况下会有一个搜索功能可以接受定制的查询参数并使用这些参数进行搜索。我有点迷茫和困惑。任何帮助表示赞赏。

【问题讨论】:

  • 使用标准有什么问题?

标签: grails groovy


【解决方案1】:

实际上,我的应用程序有几个文本字段和 6 个复选框。显然我不能根据每个不同的条件组合编写自定义搜索功能,组合太多了

您并不需要真正关心如何处理这些组合。如果您可以将字段名称和值作为 Map 接收,则可以简单地将 Map 传递给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
    } 
  }
}

【讨论】:

  • 谢谢,我之前没有使用过标准,所以我不确定它是如何使用的以及它是什么。这是很棒的指导。我会试试的。
猜你喜欢
  • 2015-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-11
  • 1970-01-01
  • 1970-01-01
  • 2020-02-04
相关资源
最近更新 更多