[英]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.