Query Builder

On this page 2

@stacksjs/query-builder is the low-level database query interface. It re-exports bun-query-builder; most application code should use models and reach for the query builder when a query does not belong on a model.

import { db } from '@stacksjs/database'

const users = await db
  .selectFrom('users')
  .where('active', '=', true)
  .orderBy('name', 'asc')
  .limit(25)
  .get()

Write data

await db.insertInto('users')
  .values({ name: 'Ada', email: 'ada@example.com' })
  .execute()

await db.update('users')
  .set({ active: false })
  .where('id', '=', 1)
  .execute()

await db.deleteFrom('users')
  .where('id', '=', 1)
  .execute()

Join and aggregate

const posts = await db
  .selectFrom('posts')
  .join('users', 'posts.user_id', '=', 'users.id')
  .select(['posts.*', 'users.name as author_name'])
  .get()

const count = await db.selectFrom('users').count()

Configure dialects, timestamps, pagination, relation limits, transaction retries, SQL features, and soft deletes in config/query-builder.ts. SQLite is the default dialect. The database proxy initializes the query builder lazily on first use.