如何使用 Persistent 获取数据库实体的 ID?
How to get the id of a database entity with Persistent?
我有一个数据库模型,像这样使用 Persistent
import Database.Persist.TH (mkPersist, persistUpperCase,
share, sqlSettings)
share [mkPersist sqlSettings] [persistUpperCase|
Foo
field1 Int
field2 Bool
|]
而且我能够从数据库中获取一个对象 foo :: Foo
。我可以使用 fooField1 foo :: Int
和 fooField2 foo :: Bool
访问字段。因为我使用 sqlSettings
,所以我知道有一个 Int64
表示的数据库密钥 "id" 存储在每个实体中。例如。当我使用 get . toSqlKey :: Int64 -> ...
鉴于我的 foo :: Foo
,我如何获得 id :: Int64
?
A Foo
本身没有 id,因为 Foos
可以存在于数据库之外(在写入之前)。这就是为什么 select 操作返回一个包含键和对象的实体列表。
见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
getBy 的 return 类型是一个包含键 (personId
) 和值 (person
) 的实体。
我有一个数据库模型,像这样使用 Persistent
import Database.Persist.TH (mkPersist, persistUpperCase,
share, sqlSettings)
share [mkPersist sqlSettings] [persistUpperCase|
Foo
field1 Int
field2 Bool
|]
而且我能够从数据库中获取一个对象 foo :: Foo
。我可以使用 fooField1 foo :: Int
和 fooField2 foo :: Bool
访问字段。因为我使用 sqlSettings
,所以我知道有一个 Int64
表示的数据库密钥 "id" 存储在每个实体中。例如。当我使用 get . toSqlKey :: Int64 -> ...
鉴于我的 foo :: Foo
,我如何获得 id :: Int64
?
A Foo
本身没有 id,因为 Foos
可以存在于数据库之外(在写入之前)。这就是为什么 select 操作返回一个包含键和对象的实体列表。
见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
getBy 的 return 类型是一个包含键 (personId
) 和值 (person
) 的实体。