Skip to main content

Query Builder Basics

Hysteria ORM provides two query builders for different use cases:

BuilderType SafetyUse Case
ModelQueryBuilderPartialModel-aware queries with hooks, relations
QueryBuilderNoneRaw SQL, migrations, max performance

Quick Comparison

// ModelQueryBuilder - type-safe, uses model conventions
const users = await User.query()
.where('isActive', true)
.load('posts')
.many();

// QueryBuilder - raw SQL, no model features
const users = await sql.query('users')
.where('is_active', true)
.many();

Debugging Queries

Both builders support debugging with toQuery() and unWrap():

const query = User.query().where('status', 'active');
console.log(query.toQuery()); // See generated SQL

Write operations like insert(), update(), delete() return a WriteOperation that is only executed when awaited. You can inspect the SQL without executing:

// Get the SQL without executing
const insertOp = sql.query('users').insert({ name: 'John' });
console.log(insertOp.toQuery()); // See the INSERT SQL

// Execute by awaiting
const result = await insertOp;

Next: Model Query Builder