假设我有一个带有.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
)。
答案 0 :(得分:1)
我找到了(?)(一个?)答案。它不是很漂亮,但是:
get (TorrentDKey {unTorrentDKey = torrentPInfoHash torrent})
作品。
unTorrentDKey
是模板haskell中生成的东西。
看起来我必须胡椒
let primaryKey = TorrentDKey {unTorrentDKey = torrentPInfoHash torrent}
在我的代码中。