首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用Esqueleto处理列表类型

用Esqueleto处理列表类型

提问于 2018-01-15 08:09:21
回答 1关注 0查看 198

数据类型定义为:

代码语言:javascript
复制
data ComitteeView = CommitteeView { committeeId :: CommitteeId
                                  , committeeMembers :: [Person] 
                                  }

data CommitteesView = CommitteesView { committeeView :: [CommitteeView] }

现在,我有一个持久的模型,定义为:

代码语言:javascript
复制
Person
  name  Text

Committee
  name  Text

CommitteePerson
  personId    PersonId
  committeeId CommitteeId

我可以很容易地创建一个查询,使用Esqueleto填充一个Committee teeView。会是这样的:

代码语言:javascript
复制
getCommitteeView cid = 
  CommitteeView <$> runDB $ 
    select $
      from (person `InnerJoin` pxc `InnerJoin` committee) -> do
        on  (committee ^. CommitteeId ==. pxc ^. CommitteePersonCommitteeId)
        on  (person ^. PersonId       ==. pxc ^. CommitteePersonPersonId)
        where_ (committee ^. CommitteePersonCommitteeId ==. val cid)
        return person

现在,考虑一下人口问题。CommitteesView原则上,我们通过在上面的查询中运行子查询来获得足够的数据来填充。好吧,很公平。现在我如何使用“Haskell-list的组”,比如group by在SQL中?如何折叠行,以便最终得到一个人员列表?

我觉得esqueleto无法处理这种情况(也就是说,它没有一个组合器来完成这个任务)。而且我的底层数据库显然不支持Haskell列表作为列。但是,当然,我不能是唯一一个面对这个问题的人。什么是有效的策略?把n个列表折叠成n个列表?或奔跑n+1询问?还有其他选择吗?

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档