在域 class 的每个 属性 中搜索
Search in every property of domain class
假设我有这个域 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)
...
使用where
查询:
Person.where {
name ==~ s || street ==~ s || gender ==~ s || foo ==~ s || bar ==~ s
}.get()
=~
可以用来代替 ==~
来区分大小写。
我建议使用 grails elastic search plugin
您可以通过添加 属性
使您的域可搜索
class Person{
String name
String street
String gender
String foo
String bar
...
static searchable = true
}
您还可以 include/exclude 字段
class Person{
String name
String street
String gender
String foo
String bar
...
static searchable = {
except = 'foo'
}
}
上述答案的替代方法是使用标准。
您的代码如下
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 的变量。 Params 是您通常在控制器中使用的参数映射。使用 g:pagination 和 g:sortableColumn 时,您可能会在 params 映射中获得 [max:, offset:, order:, sort:] 值。如果将这些传递给标准,您将自动获得一些分页结果。
这可能看起来不像其他选项那么简单,但在处理更复杂的查询时会非常灵活。也可以在 de query={} 声明中使用 ifs,这会变得非常方便。
假设我有这个域 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)
...
使用where
查询:
Person.where {
name ==~ s || street ==~ s || gender ==~ s || foo ==~ s || bar ==~ s
}.get()
=~
可以用来代替 ==~
来区分大小写。
我建议使用 grails elastic search plugin
您可以通过添加 属性
使您的域可搜索class Person{
String name
String street
String gender
String foo
String bar
...
static searchable = true
}
您还可以 include/exclude 字段
class Person{
String name
String street
String gender
String foo
String bar
...
static searchable = {
except = 'foo'
}
}
上述答案的替代方法是使用标准。
您的代码如下
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 的变量。 Params 是您通常在控制器中使用的参数映射。使用 g:pagination 和 g:sortableColumn 时,您可能会在 params 映射中获得 [max:, offset:, order:, sort:] 值。如果将这些传递给标准,您将自动获得一些分页结果。
这可能看起来不像其他选项那么简单,但在处理更复杂的查询时会非常灵活。也可以在 de query={} 声明中使用 ifs,这会变得非常方便。