用于自定义主键的持久性 `toSqlKey`

Fel*_*ter 2 persistent yesod

我定义如下模型,其中Category有一个非整数的主键code类型Text

Category
    code Text
    Primary code
    deriving Show Typeable

CategoryTreeNode
    name Text
    code CategoryId Maybe
    lft Int MigrationOnly default=0
    rgt Int MigrationOnly default=0
    deriving Show Typeable
Run Code Online (Sandbox Code Playgroud)

对于没有定义的模型Primary,我可以使用toSqlKey将任意Int64s 转换为Key Category. 具有自定义主键的模型是否有等效功能?

Fel*_*ter 5

我通过查看persistent的TH模块找到了答案:

https://github.com/yesodweb/persistent/blob/9396c278fc181fdac4a97c53637700417f41a478/persistent-template/Database/Persist/TH.hs#L857-L858

这一行表明 aCategoryKey是通过 TH 生成的,事实确实如此:

let x :: Key Category
    x = CategoryKey "foobar"
Run Code Online (Sandbox Code Playgroud)