I\'m new to both Haskell and Yesod, and am trying to build a simple web application that can answer queries from an external API. I have built a parser (using Parsec), that
PersistInt64
is here: Database.Persist.Types
.
Previously PersistInt64
was here: Database.Persist.Store
.
Just an example of how to use toSqlKey (Persistent 2.0.2)
share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
Users
email String
password String
alias String
deriving Show
|]
connStr = "host=localhost dbname=communis_db user=communis password=develpass port=5432"
inBackend :: ReaderT SqlBackend (NoLoggingT (ResourceT IO)) a-> IO a
inBackend action = runStderrLoggingT $ withPostgresqlPool connStr 10 $ \pool -> liftIO $ do
flip runSqlPersistMPool pool $ do
runMigration migrateAll
action
toUserId :: Int64 -> UsersId
toUserId = toSqlKey
get_user :: Int64 -> IO (Maybe Users)
get_user = inBackend . get . toUserId
delete_user :: Int64 -> IO ()
delete_user = inBackend . delete . toUserId
Even if the answer can already be found in the comments, I would like to give a complete example.
Assuming we have a Person
Model, the following function returns a record for the persion with the given ID (if it exists):
import Database.Persist.Types (PersistValue(PersistInt64))
getByIntId :: Integral i => i -> Handler (Maybe Person)
getByIntId i = runDB $ get $ Key $ PersistInt64 (fromIntegral i)
The import
is needed to let us construct the persist-version of an integer. fromIntegral
converts any integer to the expected type Int64
.
Update: Since Yesod 1.2 PersistValue
lives in the module Database.Persist.Types
, before 1.2 it was Database.Persist.Store
(API Documentation).
Update 2: Since Persistent 2.0.2 there are two build-in functions to convert from/to database keys: toSqlKey
and fromSqlKey
(API Documentation, see answer by hhefesto for an example).