Tok*_*sen 36 persistence haskell yesod
我是Haskell和Yesod的新手,我正在尝试构建一个可以从外部API回答查询的简单Web应用程序.我已经构建了一个解析器(使用Parsec),它获取了我想要作为常规Int值加载的实体的ID.
但是,我对于我的生活无法弄清楚如何将这个Int变成get可接受的东西(即a Key(?)).文档中的所有示例仅从先前插入或从url dispatch获取id.
任何帮助将不胜感激,因为我似乎被困... :)
Sve*_*cke 28
即使答案已经在评论中找到,我想举一个完整的例子.
假设我们有一个PersonModel,下面的函数返回具有给定ID的persion记录(如果存在):
import Database.Persist.Types (PersistValue(PersistInt64))
getByIntId :: Integral i => i -> Handler (Maybe Person)
getByIntId i = runDB $ get $ Key $ PersistInt64 (fromIntegral i)
Run Code Online (Sandbox Code Playgroud)
的import需要,让我们构建一个整数的坚持版本.fromIntegral将任何整数转换为期望的类型Int64.
更新:由于Yesod 1.2 PersistValue存在于模块中Database.Persist.Types,因此在1.2之前Database.Persist.Store(API文档).
更新2:自持久2.0.2以来,有两个内置函数可以从/向数据库键转换:toSqlKey和fromSqlKey(API文档,请参阅hhefesto的答案以获取示例).