Sql Grails将行查询到数组

Sql Grails将行查询到数组,sql,grails,map,groovy,Sql,Grails,Map,Groovy,我是Groovy和Grails的新手。我想这个问题可能有一个简单的答案,我只是不知道 我有一个数据库表: id | category | caption | image | link 我有一个查询,可以为“category”中的每个不同项检索一行 我试图返回一个映射,其中每一行都是一个按其类别命名的数组 e、 例如,如果我选择行: [{category='foo',caption='stuff',…}{category='bar',caption='things',…}] 我希望能够: ret

我是Groovy和Grails的新手。我想这个问题可能有一个简单的答案,我只是不知道

我有一个数据库表:

id | category | caption | image | link
我有一个查询,可以为“category”中的每个不同项检索一行

我试图返回一个映射,其中每一行都是一个按其类别命名的数组

e、 例如,如果我选择行:

[{category='foo',caption='stuff',…}{category='bar',caption='things',…}]

我希望能够:

return [foo:foo, bar:bar]
其中:

foo = [caption='stuff', ...]
bar = [caption='things', ...]

谢谢您的帮助。

如果我正确理解了您的问题(我想您的地图是用“:”而不是“=”),那么我认为下面的方法可以奏效。如果是Groovy新手,您可能会发现GroovyWeb控制台非常有用。您可以轻松地尝试代码片段,如下所示:

def listOfMaps = [[category:'foo', caption:'stuff', something:'else'], [category:'bar', caption:'things', another:'thing']]
def mapOfMaps = [:]

listOfMaps.each { mapOfMaps += [(it.remove('category')) : it] }

assert mapOfMaps == [foo:[caption:'stuff', something:'else'], bar:[caption:'things', another:'thing']]

您可以在Groovy中使用
collect
转换列表,但是,结果取决于源数据。我无法从你的帖子推断,如果你是返回一个类别或多个项目

def ls = Category.list()
def newList = ls.collect {
    [(it.category):['caption':it.caption,'image':it.image,'link':it.link]]
}
将导致如下结果:

[
[bar:[标题:BARCOTION-2,图像:BarImage-2,链接:BarLink-2],
[bar:[标题:BARCUPTION-1,图像:BarImage-1,链接:BarLink-1],
[bar:[标题:BARCOTION-0,图像:BarImage-0,链接:BarLink-0],
[foo:[标题:FooCaption-2,图片:FooImage-2,链接:傻瓜链接-2],
[foo:[标题:footcaption-1,图片:FooImage-1,链接:傻瓜链接-1],
[foo:[标题:footcaption-0,图像:FooImage-0,链接:傻瓜链接-0]
]

如果每个类别有多个项目,您可能希望返回每个项目的列表

def  bars = newList.findAll { it.containsKey 'bar'  }
def  foos = newList.findAll { it.containsKey 'foo'  }

[foos:foos,bars:bars] 

因为我需要将映射返回到视图,所以我使用ls.collectEntries而不是ls.collect(它返回一个列表)。非常感谢。这就是我需要的。