2つのフィールド(姓と名など)で並べられたリストを取得する方法はありますか?
_.listOrderByLastAndFirst
_と.list(sort:'last, first')
が機能しないことはわかっています。
この古いソリューションは機能しなくなりました。以下のmattlaryの回答を参照してください
HQLでカスタムFinderを作成するか、基準ビルダーを使用する必要がある場合があります。
MyDomain.find("from Domain as d order by last,first desc")
または
def c = MyDomain.createCriteria()
def results = c.list {
order("last,first", "desc")
}
Hates _ 基準の回答がうまくいかなかったようです。 "last,first"
は、例外として"Property 'last,first' not found"
。 2つのフィールドで注文するには、次の操作を実行できます。
def c = MyDomain.createCriteria()
def results = c.list {
and{
order('last','desc')
order('first','desc')
}
}
これはかなり古いですが、適切な解決策を見つけるのに役立ちました。 withCriteriaショートカットを使用した「よりクリーンな」コード例:
def c = MyDomain.withCriteria {
and {
order('last', 'desc')
order('first', 'desc')
}
}
より複雑な注文基準(Grails 2.1.0でテスト済み)
def c = MyDomain.withCriteria {
property {
order('last', 'desc')
}
order('first', 'desc')
}
最初にMyDomain.property.lastでソートし、次にMyDomain.firstでソートします
あなたはこれを行うことができます
def results=MyDomain.findAll([sort:"last",order:'desc'],[sort:"first",order:'desc']);
このコード行は、ドメインクラス「MyDomain」の結果を最初に姓で、次に人物の名でソートします。
このクエリは、最初のフィールドに基づいて機能しています。最初のフィールドが空白の場合、2番目のフィールドによって短絡されます。
order('last','desc')
order('first','desc')
私は基準が最善の策だと思いますが、Finderを最初に試して正しいことをしました。 GORMからドメインオブジェクトを取得する場合、試行する正しい順序は、動的Finder、基準、HQLです。
MyDomain.findAll(sort: ['first': 'desc','last':'desc'])
grails-datastore-gorm:6.0.3で動作します
それらの項目の内容でリストを並べ替える場合、複数のプロパティに基づいて並べ替え順序を決定できるようにするいくつかのスマートを備えたコンパレーターを実装する必要があります。
Groovyスタイルのコンパレーターの例をいくつか示します here
ただし、並べ替えるリストがデータベースクエリから返されている場合は、CrteriaQueryを使用して並べ替え、その上で並べ替えることをお勧めします
同じ問題があります。私のリストはそれほど大きくないので、リンクされたドメインのフィールドでソートしたいので、グルーヴィーなソートを使用します。
def listCalendar (Calendar calendar) {
respond CalendarData.where {
calendar == calendar
}.list().sort{ "$it.attraction.type?:' '$it.attraction.name" }
}