我有一个过滤器,例如,假设名称John Doe
是用户正在搜索的人。
我具有以下域对象结构:Company--->Employee--->Name
。其中职员是公司的属性,名称是职员的属性。现在,过滤器用于name属性,但是我需要保留对Company的引用。因此,例如,我做到了:
companyList.events.each {
if(it.employee!=null){
if(it.employee.name.toString().toLowerCase().contains(filter)){
filterSet.add(it)
}
}
不幸的是,此操作对于1500个条目非常慢。但是,如果我做类似的事情,
def searchResults = Company.findAll{
employee.name == filter
}
速度非常快,但我需要过滤器才能与部分名称匹配(即说
Joh
仍与John Doe
匹配。我知道有一个名为like
的操作,但使用它失败。任何帮助将非常感激。
最佳答案
我建议您看看使用criteria。因此,在这种情况下,您可以执行以下操作:
def filter = 'joh'
def searchResults = Company.createCriteria().list() {
employee {
ilike('name', "%${filter}%")
}
}
关于grails - 根据属性grails过滤GORM对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21389940/