Transactions

Table of contents
  1. Transactions
    1. Introduction
    2. Running a transaction
      1. Using every layer inside a transaction

Introduction

You may use the Transaction method to run a set of operations within a database transaction. If an error is returned from the closure the transaction is rolled back; if it returns nil the transaction is committed.

Running a transaction

err := db.Transaction(ctx, func(tx *migro.DB) error {
    if err := orm.New[User](tx).Create(ctx, &User{Email: "a@x.io"}); err != nil {
        return err // rolls back
    }
    return query.Table(tx, "audit").Insert(ctx, query.Row{"event": "user_created"})
})

Using every layer inside a transaction

tx works with every layer (schema, query, orm, migrate, seed, relations). Returning an error rolls back; returning nil commits.