数据类型定义为:
data ComitteeView = CommitteeView { committeeId :: CommitteeId
, committeeMembers :: [Person]
}
data CommitteesView = CommitteesView { committeeView :: [CommitteeView] }
有一个持久的模型:
Person
name Text
Committee
name Text
CommitteePerson
personId PersonId
committeeId CommitteeId
可以很容易地创建一个查询,使用Esqueleto填充一个Committee teeView:
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
什么是有效的策略?我该如何简化这个代码?
相似问题