[英]Search in every property of domain class
可以说我有这个域类:
class Person{
String name
String street
String gender
String foo
String bar
...
}
有没有一种简单的方法在每个属性进行搜索(让我只需要调用一个方法来搜索Persons
用name
或street
或gender
......像String s
)?
如果不是:有没有比以下更好的方法:
Person.findByName(s)
Person.findByStreet(s)
...
上述答案的替代方法是使用条件。
您的代码如下
String searchTerm = "something"
def criteria = Person.createCriteria()
def query = {
or{
ilike('name', "%${searchTerm}%") //Case insensitive like
ilike('gender', "%${searchTerm}%")
ilike('foo', "%${searchTerm}%")
ilile('bar', "%${searchTerm}%")
...
}
}
def personInstanceTotal = Documento.createCriteria().count(query) //Returns the filtered count
def personInstanceList = Documento.createCriteria().list(params, query) //May return the paged results
现在您可能会注意到一个名为params的变量。 参数是您通常在控制器中使用的参数映射。 使用g:pagination和g:sortableColumn时,您可能会在params映射中获得[max:,offset:,order:,sort:]值。 如果将它们传递给标准,则将自动获得一些分页的结果。
这看起来不像其他选项那么简单,但是在处理更复杂的查询时可以非常灵活。 也有可能在de query = {}声明内使用ifs,这将非常方便。
使用where
查询:
Person.where {
name ==~ s || street ==~ s || gender ==~ s || foo ==~ s || bar ==~ s
}.get()
对于大小写不敏感,可以使用=~
代替==~
。
我建议使用grails弹性搜索插件
您可以通过添加属性来使您的域可搜索
class Person{
String name
String street
String gender
String foo
String bar
...
static searchable = true
}
您还可以包括/排除字段
class Person{
String name
String street
String gender
String foo
String bar
...
static searchable = {
except = 'foo'
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.