rub*_*oor 5 sql haskell persistent
我有一个数据库模型,使用像这样的Persistent
import Database.Persist.TH (mkPersist, persistUpperCase,
share, sqlSettings)
share [mkPersist sqlSettings] [persistUpperCase|
Foo
field1 Int
field2 Bool
|]
Run Code Online (Sandbox Code Playgroud)
我可以foo :: Foo从数据库中获取一个对象.我可以用fooField1 foo :: Int和访问字段fooField2 foo :: Bool.因为我使用sqlSettings,我知道存在Int64与每个实体存储的"id"的数据库密钥的代表.比如我用的时候get . toSqlKey :: Int64 -> ...
鉴于我foo :: Foo,我怎么得到id :: Int64?
A Foo本身没有id,因为它Foos可以存在于数据库之外(在它们被写入之前).这就是为什么选择操作会给你一个实体列表,它包含密钥和对象.
见http://hackage.haskell.org/package/persistent-2.2/docs/Database-Persist-Types.html#t:Entity
例如,有关从主键约束获取的yesod书(http://www.yesodweb.com/book/persistent):
personId <- insert $ Person "Michael" "Snoyman" 26
maybePerson <- getBy $ PersonName "Michael" "Snoyman"
case maybePerson of
Nothing -> liftIO $ putStrLn "Just kidding, not really there"
Just (Entity personId person) -> liftIO $ print person
Run Code Online (Sandbox Code Playgroud)
getBy的返回类型是包含key(personId)和value(person)的Entity .