resueltos - if en haskell ejemplos
Cómo realizar consultas de bases de datos en GHCi en la aplicación Yesod (2)
¿Cómo, por ejemplo, insertar un nuevo usuario en una base de datos usando los modelos de la aplicación Yesod? ¿O hay un mejor camino?
Estoy tratando con la aplicación de scaffolded. Ahora he creado la instancia de la App
y no sé cómo realizar las solicitudes que la utilizan.
:i Extra
data Extra
= Extra {extraCopyright :: Data.Text.Internal.Text,
extraAnalytics :: Maybe Data.Text.Internal.Text}
-- Defined in `Settings
let e = Extra "asdf" Nothing
let c = AppConfig {appEnv = Development, appPort = 3000, appRoot = "/", appHost = "localhost", appExtra = e}
f <- makeFoundation c
:t f
f :: App
:i App
data App
= App {settings :: AppConfig DefaultEnv Extra,
getStatic :: Yesod.Static.Static,
connPool :: persistent-1.2.3.0:Database.Persist.Class.PersistConfig.PersistConfigPool
PersistConf,
httpManager :: http-client-0.2.0.1:Network.HTTP.Client.Types.Manager,
persistConfig :: PersistConf,
appLogger :: Yesod.Core.Types.Logger}
-- Defined in `Foundation''
¿Qué sigue?
Si solo desea hacer consultas persistentes en ghci, puede hacerlo sin crear una aplicación Yesod. Lamentablemente, hacer esto difiere bastante según el back-end específico que desee utilizar.
Para SQLite:
> import Database.Persist.Sqlite
> import Model
> pool <- createSqlitePool "yesod-test.sqlite3" 2
> runSqlite "yesod-test.sqlite3" (runMigration migrateAll)
> userId <- runSqlite "yesod-test.sqlite3" (insert (User "[email protected]" Nothing))
Para Postgresql:
-- In Shell: $ createdb yesod-test
> import Database.PostgreSQL.Simple
> con <- connectPostgreSQL "dbname=yesod-test"
> import Database.Persist.Postgresql
> pcon <- openSimpleConn con
> import Model
> runSqlPersistM (runMigration migrateAll) pcon
> userId <- runSqlPersistM (insert (User "[email protected]" Nothing)) pcon
> Just user <- runSqlPersistM (get userId) pcon
> userIdent user
El andamio proporciona (al menos con yesod-bin 1.4.5) una función db
en Application.hs
que puede usar:
$ cabal repl
...
*Application> db $ insert $ User "[email protected]" Nothing