Sql Grails将行查询到数组
我是Groovy和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
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(它返回一个列表)。非常感谢。这就是我需要的。