比如说,在 Yesod/Persistent 中,我的模型设置如下:
User
ident Text
password Text Maybe
UniqueUser ident
Question
title Text
asker UserId Eq
我有一个问题
列表,并且想检索相应的用户
列表。我该如何去做呢?
我考虑过联接,但这些是一对多,而不是一对一(我认为这并不重要,但我想要一个更简单的解决方案)。手动进行连接也是一种选择,但我担心性能 - 我有
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
但我担心在map
中使用runDB
(它不会为每个用户向数据库发出单独的请求吗?)
是否有更好/更惯用的方法来实现这一目标?
最佳答案
我还没有对此进行类型检查,但我会将整个内容放入 runDB
中:
runDB $ selectList [QuestionTitle !=. ""] [LimitTo 10] >>= mapM (\qe@(Entity _ q) -> do
asker <- get $ questionAsker q
return (qe, asker))
关于haskell - Yesod/持久一对一查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9388238/