【问题标题】:Grails query rows to arraysGrails 查询行到数组
【发布时间】:2013-08-31 02:19:25
【问题描述】:

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

我有一个数据库表:

id | category | caption | image | link

我有一个查询,可让我为“类别”中的每个不同项目检索一行。

我正在尝试返回一个地图,其中每一行都是一个按其类别命名的数组。

例如,如果我选择行:

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

我希望能够:

return [foo:foo, bar:bar]

地点:

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

感谢您的帮助。

【问题讨论】:

    标签: sql grails map groovy


    【解决方案1】:

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

    def ls = Category.list()
    def newList = ls.collect {
        [(it.category):['caption':it.caption,'image':it.image,'link':it.link]]
    }
    

    会产生类似的结果:

    [
    [栏:[标题:BarCaption-2,图像:BarImage-2,链接:BarLink-2]],
    [栏:[标题:BarCaption-1,图像:BarImage-1,链接:BarLink-1]],
    [栏:[标题:BarCaption-0,图像:BarImage-0,链接:BarLink-0]],
    [foo:[标题:FooCaption-2,图片:FooImage-2,链接:FooLink-2]],
    [foo:[标题:FooCaption-1,图片:FooImage-1,链接:FooLink-1]],
    [foo:[标题:FooCaption-0,图片:FooImage-0,链接:FooLink-0]]
    ]

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

    def  bars = newList.findAll { it.containsKey 'bar'  }
    def  foos = newList.findAll { it.containsKey 'foo'  }
    
    [foos:foos,bars:bars] 
    

    【讨论】:

    • 由于我需要将 Map 返回到视图,因此我使用了 ls.collectEntries 而不是 ls.collect(它返回了一个列表)。谢谢!这正是我所需要的。
    【解决方案2】:

    如果我正确理解了您的问题(我认为您的意思是在地图上使用 ':' 而不是 '='),那么我认为以下方法会起作用。如果您不熟悉 Groovy,您可能会发现位于 http://groovyconsole.appspot.com/ 的 Groovy Web 控制台很有用。您可以轻松尝试 sn-ps 的代码,如下所示:

    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']]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-05
      • 2017-10-28
      • 2014-12-15
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多