2014-01-07 7 views
5

예를 들어 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

'Foundation' 모듈 (디폴트 스카 폴드)에 정의 된'makeFoundation'을 가지고'App'을 만들기위한'AppConfig' 인스 턴스를 만들어야합니다. – s9gf4ult

답변

6

ghci에서 영구 쿼리를 수행하려는 경우 Yesod 응용 프로그램을 만들지 않고도이 작업을 수행 할 수 있습니다. 불행하게도이 작업은 사용하려는 특정 백엔드에 따라 상당히 다릅니다. PostgreSQL을 들어

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

:

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

스캐 폴딩은 사용할 수 Application.hs에서 함수 db (적어도 yesod-빈 1.4.5로)은 다음과 같은 기능을 제공 SQLite는 대한

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