Query Builder Basics
Hysteria ORM provides two query builders for different use cases:
| Builder | Type Safety | Use Case |
|---|---|---|
| ModelQueryBuilder | Partial | Model-aware queries with hooks, relations |
| QueryBuilder | None | Raw 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