只提供过滤器的Groovy域类查找

时间:2016-11-24 08:46:31

标签: grails groovy

你好

我需要在Groovy中为提供的过滤器字段执行Domain类过滤。 这是代码示例:

User.findAll(name: filter.name, age: filter.age, department: filter.department)

是否存在一些语法糖来帮助我验证是否例如 filter.name 未提供,例如null或empty - 不要按此字段过滤。感谢。

2 个答案:

答案 0 :(得分:2)

Abs有权利。以下是未提供过滤器字段的if语句的示例:

User.createCriteria().list {
  if (filter.name)       eq("name", filter.name)
  if (filter.age)        eq("age", filter.age)
  if (filter.department) eq("department", filter.department)
}

答案 1 :(得分:0)

你可以在参数图上正确应用糖(假设filter是Map):

def args = filter.collectEntries{ k, v -> 
  [ 'age', 'name', 'department' ].contains( k ) && v ? [ (k):v ] : Collections.EMPTY_MAP 
}
def users = User.findAll args