Получить идентификатор из записи Entity

У меня есть Entity recordконкретно Entity User и мне нужно извлечь идентификатор, который пользователь имеет в базе данных как Int,

Из чтения документов кажется entityKey было бы полезно здесь, но я не совсем уверен, как бы я получить о Int из.

1 ответ

Решение

Вы должны использовать комбинацию fromSqlKey а также entityKey, Пример программы, демонстрирующей это:

#!/usr/bin/env stack
{- stack
     --resolver lts-9.0
     --install-ghc
     runghc
     --package persistent
     --package persistent-sqlite
     --package persistent-template
     --package mtl
-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE EmptyDataDecls             #-}
{-# LANGUAGE FlexibleContexts           #-}
{-# LANGUAGE GADTs                      #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses      #-}
{-# LANGUAGE OverloadedStrings          #-}
{-# LANGUAGE QuasiQuotes                #-}
{-# LANGUAGE TemplateHaskell            #-}
{-# LANGUAGE TypeFamilies               #-}
import           Control.Monad.IO.Class  (liftIO, MonadIO)
import Control.Monad.Reader
import           Database.Persist
import           Database.Persist.Sqlite
import           Database.Persist.TH
import Data.Int

share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
Person
    name String
    age Int Maybe
    deriving Show
|]

insertPerson :: MonadIO m => ReaderT SqlBackend m (Key Person)
insertPerson =  insert $ Person "Michael" $ Just 26

main :: IO ()
main = runSqlite ":memory:" $ do
    runMigration migrateAll
    michaelId <- insertPerson
    (michael :: Entity Person) <- getJustEntity michaelId
    liftIO $ print $ (fromSqlKey . entityKey $ michael :: Int64)

И это вывод:

~/g/scripts $ stack persist.hs
Migrating: CREATE TABLE "person"("id" INTEGER PRIMARY KEY,"name" VARCHAR NOT NULL,"age" INTEGER NULL)
1
Другие вопросы по тегам