12

findAllクエリにsort、order、max、offsetを統合したいと思います。以下は正常に機能します。

def books = Book.findAll("from Book as b where b.approved=true order by b.dateCreated  desc", [max: max, offset: offset])

しかし、私が欲しいのは:

def books = Book.findAll("from Book as b where b.approved=true", [sort: 'dateCreated', order: 'desc', max: max, offset: offset])

これは動作しません。これをどのように書き直す必要がありますか?

4

4 に答える 4

8

HQLはパラメーターとしての並べ替えと順序付けをサポートしていないため、HQL式の一部として「順序付け」を含める必要があります

def books = Book.findAll("from Book as b where b.approved=true"
  + " order by b.dateCreated desc", [max: max, offset: offset])

(またはこの場合Book.findAllByApproved(true, [...])、HQLの代わりに使用してください)。

したがって、並べ替えと順序が変数である場合は、次のようなトリックが必要です。

def books = Book.findAll("from Book as b where b.approved=true"
  + (params.sort ? " order by b.${params.sort} ${params.order}" : ''), 
  [max: max, offset: offset])
于 2012-11-19T09:24:06.087 に答える
7

whereクエリを使用すると次のようになります。

def books = Book.where{approved == true}.list(sort: 'dateCreated', order: 'desc', max: max, offset: offset)

または、ページから直接パラメータを使用します。

def books = Book.where{approved == true}.list(params)

于 2015-07-22T15:43:18.207 に答える
6

並べ替えと順序付けをサポートしているため、「findAllBy」を使用します。

def results = Book.findAllByTitle("The Shining",
             [max: 10, sort: "title", order: "desc", offset: 100])

詳細はこちらをクリックしてください。

于 2017-11-01T13:59:47.063 に答える
1

私はあなたがコントローラーまたはサービスクラスの本のリストをフェッチすることを呼び出していると仮定しています。

これをコントローラーアクションから呼び出す場合は、魔法の変数「params」がすでに使用可能です。たとえば、次のようにページをリクエストした場合

book/list?max=10&offset=2

その場合、「params」にはすでにそれらの値が自動的にマッピングされます。

次のように、パラメータマップにさらにアイテムを追加できます。

params.sort = "dateCreated"
params.order = "desc"

必要に応じてパラメータを作成したら、次のようにGrails動的クエリを使用できます。

def books = Book.findAllByApproved(true, params)
// use "books" variable as you wish
于 2017-11-01T21:47:49.610 に答える