# transactionFor() function · @imqueue/pg-prisma

Source: https://imqueue.org/api/pg-prisma/latest/pg-prisma.transactionfor/
Published: 2026-08-28
Author: @imqueue maintainers (https://github.com/imqueue)
Package: @imqueue/pg-prisma 2.0.0 — generated reference, not hand-written

Repositories bound to a transaction.

**Signature:**

```typescript
export declare function transactionFor<Repositories extends object>(db: Transactional, options: RepositoryOptions): <Result>(run: (repository: Repositories) => Promise<Result>) => Promise<Result>;
```

## Parameters


| Parameter | Type | Description |
| --- | --- | --- |
| db | [Transactional](https://imqueue.org/api/pg-prisma/latest/pg-prisma.transactional/) | The client to open the transaction on. |
| options | [RepositoryOptions](https://imqueue.org/api/pg-prisma/latest/pg-prisma.repositoryoptions/) | The same options [repositoriesFor()](https://imqueue.org/api/pg-prisma/latest/pg-prisma.repositoriesfor/) takes. |


**Returns:**

<Result>(run: (repository: Repositories) => Promise<Result>) => Promise<Result>

A function running work with transaction-bound repositories.

## Remarks

Prisma Next has no nested writes — `create` rejects a relation key outright — so anything that used to be one nested call is now several, and they have to commit or roll back together. The callback's repositories run on the transaction's connection; throwing from it rolls back.

## Example


```typescript
const transaction = transactionFor<Repositories>(db, { relations });

await transaction(async repository => {
    const user = await repository.user.create<User>({ input });
    await repository.credential.create({ input: { userId: user.id } });
});
```

