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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Grails的多个字段中订购?相关的知识,希望对你有一定的参考价值。

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

我知道.listOrderByLastAndFirst.list(sort:'last, first')将不起作用。

答案

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

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

MyDomain.find("from Domain as d order by last,first desc")

要么

def c = MyDomain.createCriteria()
def results = c.list {
       order("last,first", "desc")
}
另一答案

我有同样的问题。由于我的列表不是那么大,我使用groovy排序,因为我想对链接域的字段进行排序:CalendarData - > Attraction

def listCalendar (Calendar calendar) {
    respond CalendarData.where {
        calendar == calendar
    }.list().sort{ "$it.attraction.type?:' '$it.attraction.name" }
}
另一答案

Hates_标准答案似乎对我没有用;把"last,first"整理好只会导致例外,"Property 'last,first' not found"。要在两个字段上订购,您可以执行以下操作:

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排序

另一答案

此查询基于第一个字段进行工作。当第一个字段为空时,它会被第二个字段短接。

order('last','desc')
order('first','desc')
另一答案

我认为一个标准是最好的选择,但你通过首先尝试查找器做了正确的事情。从GORM检索域对象时,执行尝试的正确顺序是:动态查找程序,条件,HQL。

另一答案

你可以这样做

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

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

另一答案
MyDomain.findAll(sort: ['first': 'desc','last':'desc'])

使用grails-datastore-gorm:6.0.3

另一答案

如果您要对其项目内容进行排序,则需要实现一个比较器,该比较器具有一些智能,可以根据多个属性决定排序顺序。

一些Groovy式比较器的例子显示为here

但是,如果您正在从数据库查询返回正在排序的列表,那么最好使用CrteriaQuery对其进行排序并对其进行排序

以上是关于如何在Grails的多个字段中订购?的主要内容,如果未能解决你的问题,请参考以下文章

如何按 Grails 中的多个字段排序?

Grails 映射对多个字段进行排序 :: Groovy 对多个映射条目进行排序

如何在 Grails 中显示异常?

显示 Grails 字段错误

带有片段参数的 Grails render()

如何在 Magento 中添加自定义字段来订购?