Yesod/Persistent一对一查询

li.*_*idm 3 haskell yesod

比如说,在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)

但是我担心runDBmap(不会为每个用户单独向数据库发出请求?)

是否有更好/更惯用的方法来实现这一目标?

Mic*_*man 6

我还没有对它进行打字检查,但是我会将整个内容粘贴在runDB:

runDB $ selectList [QuestionTitle !=. ""] [LimitTo 10] >>= mapM (\qe@(Entity _ q) -> do
    asker <- get $ questionAsker q
    return (qe, asker))
Run Code Online (Sandbox Code Playgroud)