使用持久键列表选择 (Yesod)

Posted

技术标签:

【中文标题】使用持久键列表选择 (Yesod)【英文标题】:Select with list of keys Persistent (Yesod) 【发布时间】:2014-05-30 16:17:46 【问题描述】:

我需要使用 Persistent (Yesod) 从键列表中获取实体列表

假设我有一个Model 及其对应的ModelId。我有:

keys :: [ModelId]

我需要得到

models :: [Model]

目前最好的做法似乎是:

models' <- mapM get keys
models <- return $ Data.Maybe.catMaybes models'

有没有更有效的方法来做到这一点?持久化是否将获取请求排队或一一执行?

yesod persistent: get list of entities from list of keys 也有同样的问题,但我想知道这是否是最有效的方法。

【问题讨论】:

我不知道 yesod 是如何执行请求的,但是您可以将此命令简化为 models &lt;- fmap catMaybes $ mapM get keys,这样您就没有中间的 models' 变量。 【参考方案1】:

如果我很好地理解了你的问题,你可以通过尝试这样的方式来实现它:

models' <- selectList [ModelId <-. keys] []

通过使用mapM,您将查询数据库length keys 次,而selectList 执行单个查询。

【讨论】:

啊。谢谢。不知道我可以使用 ModelId 来选择模型。

以上是关于使用持久键列表选择 (Yesod)的主要内容,如果未能解决你的问题,请参考以下文章

选择具有 yesod 持久性的列子集

Yesod 持久示例

yesod 持久性依赖缺失

Yesod 持久代码的类型类约束

Yesod 数据库持久记录访问

“类型变量不明确”在 Haskell Yesod 中使用 Persistent