Tok*_*sen 36 persistence haskell yesod
我是Haskell和Yesod的新手,我正在尝试构建一个可以从外部API回答查询的简单Web应用程序.我已经构建了一个解析器(使用Parsec),它获取了我想要作为常规Int值加载的实体的ID.
但是,我对于我的生活无法弄清楚如何将这个Int变成get
可接受的东西(即a Key
(?)).文档中的所有示例仅从先前插入或从url dispatch获取id.
任何帮助将不胜感激,因为我似乎被困... :)
Sve*_*cke 28
即使答案已经在评论中找到,我想举一个完整的例子.
假设我们有一个Person
Model,下面的函数返回具有给定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的答案以获取示例).