簡體   English   中英

搜索域類的每個屬性

[英]Search in every property of domain class

可以說我有這個域類:

class Person{
  String name
  String street
  String gender
  String foo
  String bar
  ...
}

有沒有一種簡單的方法在每個屬性進行搜索(讓我只需要調用一個方法來搜索Personsnamestreetgender ......像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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM