Yesod:使用自定义主键查询`persist`数据库

时间:2016-12-19 03:40:21

标签: haskell yesod persist

假设我有一个带有.songs的SQL表,并且我将自定义persist作为主键而不是自动递增Text键。

例如,我的数据库定义是:

Int64

假设我有一个普通的share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase| TorrentD infoHash Text ipAddr [Text] Primary infoHash deriving Show |] 值,那么在数据库中查找主键与我的Text值匹配的行的惯用方法是什么? < / p>

Text无法正常工作,runDB $ get $ toSqlKey ("test" :: Text)不支持自定义主键,因此预计需要toSqlKey

手动创建密钥并运行Int64并不起作用,因为它给我一个关于runDB $ get $ Key $ PersistText ("test" :: Text)不在范围内的错误(尽管我的导入中有Database.Persist.Class )。

1 个答案:

答案 0 :(得分:1)

我找到了(?)(一个?)答案。它不是很漂亮,但是:

get (TorrentDKey {unTorrentDKey = torrentPInfoHash torrent})

作品。

unTorrentDKey是模板haskell中生成的东西。

看起来我必须胡椒

let primaryKey = TorrentDKey {unTorrentDKey = torrentPInfoHash torrent}

在我的代码中。