Yesod:从Int获取ID的数据库实体

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以来,有两个内置函数可以从/向数据库键转换:toSqlKeyfromSqlKey(API文档,请参阅hhefesto的答案以获取示例).


pan*_*urg 5

PersistInt64在这里:Database.Persist.Types.

以前PersistInt64在这里:Database.Persist.Store.