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.