haskell - Yesod/持久一对一查询

标签 haskell yesod

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

相关文章:

forms - Yesod 中动态大小的字段列表

linux - 移动已编译的 Haskell 程序

haskell - 在 Haskell 中,当我们使用 do block 时,它如何确定要使用哪个 monad?

Haskell - 过滤器类型类

scala - 为什么我们需要 "Algebraic Data Types"?

haskell - 您如何解释像 Ring 和 Yesod 这样的纯功能 Web 服务器不是 MVC?

macos - Haskell 包缺少 c 库

haskell yesod文件上传输入文件未找到

haskell - Yesod:与 Lucius 合作时出现奇怪的错误

sql - Haskell 对日期的持久查询 (Yesod)