Using the Prisma Client

Use `db` from `@kit/database` for type-safe database operations.

Import Prisma as db from @kit/database:

import { db } from '@kit/database';

This guide is part of the Database Configuration documentation.

Basic Operations

const users = await db.user.findMany();
const memberships = await db.member.findMany({
where: { organizationId: currentOrgId },
include: { user: true },
});
await db.user.update({
where: { id: userId },
data: { name: 'Alice Johnson' },
});

Tenant-Scoped Queries

Always filter tenant-owned data by fields such as organizationId or userId.

const members = await db.member.findMany({
where: { organizationId: currentOrgId },
orderBy: { createdAt: 'desc' },
take: 20,
});

Avoid unscoped tenant queries:

const allMembers = await db.member.findMany(); // avoid for tenant-owned data

Transactions

const result = await db.$transaction(async (tx) => {
const org = await tx.organization.create({
data: {
id: orgId,
name: 'Acme',
slug: 'acme',
createdAt: new Date(),
updatedAt: new Date(),
},
});
const member = await tx.member.create({
data: {
id: memberId,
organizationId: org.id,
userId: currentUserId,
role: 'owner',
createdAt: new Date(),
},
});
return { org, member };
});

Common Pitfalls

  • Forgetting ownership filters on tenant data
  • Querying large tables without take
  • Assuming a model exists because it appears in sample code

Next: Rate Limit Service →