2014-01-07 18 views
5

如何使用Yesod應用程序的模型將新用戶插入到數據庫中?或者,還有更好的方法?如何在Yesod應用程序的GHCi中執行數據庫查詢

我正在處理腳手架應用程序。現在我創建了App實例,並且不知道如何使用它來執行請求。

: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' 

下一步是什麼?

+0

你嘗試過的第一件事是什麼? –

+0

它看起來像我需要創建基礎(默認是'App')並以某種方式執行查詢。 – s9gf4ult

+0

我被困在創建'AppConfig' instnance創建'App'與'基礎'模塊(這是默認腳手架)中定義的'makeFoundation'。 – s9gf4ult

回答

6

如果您只是想在ghci中進行持久查詢,您可以在不創建Yesod應用程序的情況下執行此操作。不幸的是,這取決於你想要使用的具體後端。

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)) 

對於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 
2

腳手架提供(至少耶索德斌1.4.5)在Application.hs功能db,您可以使用:

$ cabal repl 
... 
*Application> db $ insert $ User "[email protected]" Nothing 
相關問題