如何在Grails的多个字段中订购?

The*_*ain 41 grails sql-order-by grails-orm

有没有办法获得由两个字段排序的列表,比如姓和名?

我知道.listOrderByLastAndFirst.list(sort:'last, first')将无法正常工作.

mat*_*ary 82

Hates_标准答案对我来说似乎不起作用; 把"last,first"为了只会导致异常说"Property 'last,first' not found".要在两个字段上订购,您可以执行以下操作:

def c = MyDomain.createCriteria()
def results = c.list {
    and{
       order('last','desc')
       order('first','desc')
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 没有Grails 2.3.7中的外部`和`块,它的工作方式相同 (2认同)

小智 9

这已经很老了,但帮助我找到了合适的解决方案.使用withCriteria快捷方式的"清洁"代码示例:

def c = MyDomain.withCriteria {
    and {
        order('last', 'desc')
        order('first', 'desc')
    }
}
Run Code Online (Sandbox Code Playgroud)


Hat*_*es_ 8

这个旧解决方案不再有效.请参阅下面的mattlary的答案

您可能必须在HQL中编写自定义查找程序或使用Criteria Builder.

MyDomain.find("from Domain as d order by last,first desc")
Run Code Online (Sandbox Code Playgroud)

要么

def c = MyDomain.createCriteria()
def results = c.list {
       order("last,first", "desc")
}
Run Code Online (Sandbox Code Playgroud)

  • 工作5年前;)羞耻我无法删除它. (9认同)
  • 哦,我不喜欢那些过去常常工作的人. (5认同)
  • 我试过这个,解决方案不起作用. (3认同)

小智 6

MyDomain.findAll(sort: ['first': 'desc','last':'desc'])
Run Code Online (Sandbox Code Playgroud)

适用于 grails-datastore-gorm:6.0.3


chi*_*him 5

更复杂的订购标准,(在Grails 2.1.0中测试)

def c = MyDomain.withCriteria {
    property {
        order('last', 'desc')
    }
    order('first', 'desc')
}
Run Code Online (Sandbox Code Playgroud)

首先通过MyDomain.property.last然后通过MyDomain.first排序


小智 5

你可以这样做

def results=MyDomain.findAll([sort:"last",order:'desc'],[sort:"first",order:'desc']);
Run Code Online (Sandbox Code Playgroud)

这行代码将首先按人员的姓氏和名字对域类“MyDomain”的结果进行排序。