3 Execute search - leandrogehlen/grails-search-fields GitHub Wiki
The usage examples will use the models defined in Search rules
Simple
This is a simple example of how to execute a search
def list(Integer max) {
params.max = Math.min(max ?: 10, 100)
params.sort = 'name'
params.order = 'asc'
params.field = 'lastName'
params.value = 'test'
def search = Author.createSearch()
search.setSort(params.sort, params.order == 'asc')
search = search.execute(params.field, params.value)
//generate: select count(author) from Author author where (lower(author.lastName) like 'test%)
def count = Author.executeQuery(search.count)
//generate: from Author author where(lower(author.lastName) like 'test%') order by author.name asc
def list = Author.findAll(search.query, [max: params.max, offset: params.offset])
[authorInstanceList: list, authorInstanceTotal: count]
}
Join
When search definitions contain a field referenced another model (belongsTo), will automatically generate the HQL join with the referenced model. For exeample
def search = Book.createSearch()
//generate: select count(book) from Book book join book.author author
def count = Author.executeQuery(search.count)
//generate: from Book book join fetch book.author author
def list = Author.findAll(search.query)
//Add where
search = search.execute("title" , "test")
//generate: select count(book) from Book book join book.author author where(lower(book.title) like 'test%')
def count = Author.executeQuery(search.count)
//generate: from Book book join fetch book.author author where(lower(book.title) like 'test%')
def list = Author.findAll(search.query)
Sorting
Below is shown the possibilities for ordering.
def search = Book.createSearch()
search.order = "author_name, title asc, ISBN desc"
//generate: select count(book) from Book book join book.author author
def count = Author.executeQuery(search.count)
//generate: from Book book join fetch book.author author order by book.title asc, book.ISBN desc
def list = Author.findAll(search.query)
search.setSort("releaseDate", false)
//generate: from Book book join fetch book.author author order by book.releaseDate desc
def list = Author.findAll(search.query)
search.setSort("author_name", true)
//generate: from Book book join fetch book.author author order by author.name asc
def list = Author.findAll(search.query)