【问题标题】:yesod persistent: get list of entities from list of keysyesod 持久性:从键列表中获取实体列表
【发布时间】:2013-02-10 01:52:29
【问题描述】:

假设我有fooIds :: [Key Foo]。我如何获得foos :: [Foo]

我试过了

do
    foos <- map get fooIds

但它给了我

No instance for (MonadBaseControl IO m0)
  arising from a use of `get'

我假设是因为我需要使用runDB。但我不太确定如何使用它。

【问题讨论】:

    标签: haskell persistent yesod


    【解决方案1】:

    看起来像这样:

    foos <- runDB $ mapM get fooIds
    

    但是,这将为您提供Maybe Foos 的列表。您可以通过将get 替换为get404 或使用catMaybes 将其转换为Foos 列表。请注意,这是两种不同的方法:第一种方法,如果任何 ID 不存在,用户将得到 404。第二种方法,该键将被忽略。

    【讨论】:

    • 啊,谢谢!如果我有 mfooIds :: [Maybe (Key Foo)] 并想得到 mfoos :: [Maybe Foo] 怎么办?我将如何制作一个采用 Maybe Keyget 函数?
    • 没关系,通过mfoos &lt;- runDB $ mapM (maybe (return Nothing) get) mfooIds得到它
    • 如果数据库是远程的,runDB $ mapM get fooIdsfmap (runDB . get) fooIds 之间是否有任何区别(请求数量)?
    • 每次 runDB 调用都会引入另一个数据库事务。
    【解决方案2】:

    另一个有用的方法是

    foos <- runDB $ mapM getJustEntity fooIds
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-03
      • 1970-01-01
      • 1970-01-01
      • 2018-06-16
      • 2014-11-22
      • 2013-09-01
      • 1970-01-01
      • 2021-09-18
      相关资源
      最近更新 更多