比如说,在Yesod/Persistent中,我有这样的模型设置:
User
ident Text
password Text Maybe
UniqueUser ident
Question
title Text
asker UserId Eq
Run Code Online (Sandbox Code Playgroud)
我有一个Questions 列表,并希望检索相应的Users 列表.我该怎么做呢?
我考虑过加入,但这些是一对多的,而不是一对一的(我想它没关系,但我想要一个更简单的解决方案).手动进行连接也是一种选择,但我担心性能 - 我有
questions <- runDB $ selectList [QuestionTitle !=. ""] [LimitTo 10]
let askerIds = map (\(Entity _ q) -> questionAsker q) questions
askers <- sequence $ map (runDB . get) askerIds
let questionsAndAskers = zip questions askers
Run Code Online (Sandbox Code Playgroud)
但是我担心runDB在map(不会为每个用户单独向数据库发出请求?)
是否有更好/更惯用的方法来实现这一目标?
我还没有对它进行打字检查,但是我会将整个内容粘贴在runDB:
runDB $ selectList [QuestionTitle !=. ""] [LimitTo 10] >>= mapM (\qe@(Entity _ q) -> do
asker <- get $ questionAsker q
return (qe, asker))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1254 次 |
| 最近记录: |