logo Buffalo slack logo
Buffalo Integration
Database

Buffalo Integration#

Generate a New App#

When you generate a new Buffalo application you can choose the target database with the --db-type flag. For instance, to generate a new app with MySQL database support, you can write the following:

$ buffalo new coke --db-type mysql

By default, Buffalo will generate an app with PostgreSQL as the backing database.

Skip Database Support#

If you want to handle the database without using Pop, or if you’re building an app without database, it’s also possible to skip generation of all database components with the --skip-pop flag.

$ buffalo new coke --skip-pop

The Pop Transaction Middleware#

Buffalo provides a Pop middleware to ease database usage within Buffalo: https://github.com/gobuffalo/buffalo-pop

Setup#

This middleware is configured for you by default, if you choose to use Pop when creating a new project.

actions/app.go

func App() *buffalo.App {
	if app == nil {
        // [...]

        app.Use(poptx.PopTransaction(models.DB))

        // [...]

        app.GET("/", HomeHandler)
    }

    return app
}

poptx.PopTransaction(models.DB) uses the connection to the configured database to create a new PopTransaction middleware. This middleware does the following:

  • Log the total duration spent during the request making database calls.
  • Wrap each HTTP request in a database transaction.
  • Commit if there was no error executing the middlewares and action; and the response status is a 2xx or 3xx.
  • Rollback otherwise.

Handle Transaction By Hand#

If you need to handle a transaction by hand, you can skip the middleware for a given route:

func App() *buffalo.App {
	if app == nil {
        // [...]
        txm := poptx.PopTransaction(models.DB)
        app.Use(txm)
        a.Middleware.Skip(txm, HomeHandler)

        // [...]

        app.POST("/form", FormHandler)
        app.GET("/", HomeHandler)
    }

    return app
}