API Reference

API Reference#

Complete listing of all Duxt ORM classes, methods, and types.

Model<T> Methods#

The Model<T> class provides the primary query interface.

MethodReturnsDescription
query() QueryBuilder<T> Get a raw query builder
all()Future<List<T>>Get all records
find(id)Future<T?>Find by primary key
findOrFail(id) Future<T> Find or throw RecordNotFoundException
first()Future<T?>Get first record
firstOrFail()Future<T>Get first or throw
where(col, val, [op]) QueryBuilder<T> Start a where query
whereIn(col, values) QueryBuilder<T> Where column in list
include(relations) QueryBuilder<T> Eager load relations
create(attrs) Future<T> Create and save a new record
count()Future<int>Count all records
exists() Future<bool> Check if any records exist
doesntExist() Future<bool> Check if no records exist
withTrashed() QueryBuilder<T> Include soft-deleted records
onlyTrashed() QueryBuilder<T> Only soft-deleted records

Entity Instance Methods#

Methods available on model instances.

Persistence#

MethodReturnsDescription
save() Future<void> Insert (if new) or update
destroy() Future<void> Delete (soft delete if enabled)
forceDelete() Future<void> Permanently delete, bypass soft deletes
restore() Future<void> Restore a soft-deleted record
refresh()Future<void>Reload from database
update(attrs) Future<void> Update specific attributes and save

Lifecycle Hooks#

MethodReturnsDescription
beforeSave() Future<void> Called before insert or update
afterSave() Future<void> Called after insert or update
beforeDelete() Future<void> Called before delete (including soft delete)
afterDelete() Future<void> Called after delete (including soft delete)

Properties#

PropertyTypeDescription
iddynamicPrimary key value
tableNameStringDatabase table name
primaryKey String Primary key column (default: 'id')
timestamps bool Whether to auto-manage created_at/updated_at
softDeletes bool Whether soft deletes are enabled (default: true)
isNewboolTrue if record has no ID yet
trashedboolTrue if record is soft-deleted
guarded List<String> Columns protected from mass assignment
fillable List<String> Columns allowed for mass assignment

Relations#

MethodReturnsDescription
getRelation<R>(name) R? Get a loaded relation by name
setRelation(name, value) void Set a loaded relation
relationLoaded(name) bool Check if relation is loaded
attach(rel, id) Future<void> Attach via pivot table (many-to-many)
detach(rel, id) Future<void> Detach from pivot table
sync(rel, ids) Future<void> Sync pivot table with ID list

Entity Static Methods#

MethodReturnsDescription
setAdapter(adapter)voidSet the database adapter
registerModel<T>(fromRow, ...) void Register a model type with schema
registerRelation<T>(name, rel) void Register a relation for a model
registerPivotTable(name, ...) void Register a pivot table schema
relationsFor<T>() Map? Get relations for a model type
tableNameFor<T>() String Get table name for a model type
fromRowFor<T>() Function Get fromRow factory for a model type
isSoftDelete<T>() bool Check if model has soft deletes
schemasList<Schema>All registered schemas
pivotSchemas List<Schema> All pivot table schemas

QueryBuilder Methods#

Filtering#

MethodReturnsDescription
where(col, val, [op]) QueryBuilder AND where clause
orWhere(col, val, [op]) QueryBuilder OR where clause
whereNull(col)QueryBuilderWhere column IS NULL
whereNotNull(col) QueryBuilder Where column IS NOT NULL
whereIn(col, values) QueryBuilder Where column IN list
whereNotIn(col, values) QueryBuilder Where column NOT IN list
whereBetween(col, start, end) QueryBuilder Where column BETWEEN
whereNotBetween(col, start, end) QueryBuilder Where column NOT BETWEEN
whereLike(col, pattern) QueryBuilder Where column LIKE pattern
whereRaw(sql, [params]) QueryBuilder Raw AND where clause
orWhereRaw(sql, [params]) QueryBuilder Raw OR where clause

Soft Delete Scopes#

MethodReturnsDescription
withTrashed() QueryBuilder Include soft-deleted records
onlyTrashed() QueryBuilder Only soft-deleted records

Ordering#

MethodReturnsDescription
orderBy(col, [dir]) QueryBuilder Order by column (ASC default)
orderByDesc(col) QueryBuilder Order by column DESC
latest([col]) QueryBuilder Order by created_at DESC
oldest([col]) QueryBuilder Order by created_at ASC

Pagination#

MethodReturnsDescription
limit(n)QueryBuilderLimit results
offset(n)QueryBuilderOffset results
take(n)QueryBuilderAlias for limit
skip(n)QueryBuilderAlias for offset

Joins#

MethodReturnsDescription
join(table, first, op, second) QueryBuilder INNER JOIN
leftJoin(table, first, op, second) QueryBuilder LEFT JOIN
rightJoin(table, first, op, second) QueryBuilder RIGHT JOIN

Selection#

MethodReturnsDescription
select(columns) QueryBuilder Select specific columns
distinct()QueryBuilderReturn distinct results
groupBy(col)QueryBuilderGroup by column
having(condition)QueryBuilderHaving clause

Eager Loading#

MethodReturnsDescription
include(relations) QueryBuilder Eager load relations (supports dot notation)

Execution#

MethodReturnsDescription
get() Future<List<T>> Execute query, return all results
first()Future<T?>Get first result
firstOrFail()Future<T>Get first or throw
find(id)Future<T?>Find by primary key
findOrFail(id) Future<T> Find by primary key or throw
pluck(col) Future<List> Get single column values

Aggregates#

MethodReturnsDescription
count([col])Future<int>Count records
sum(col)Future<num>Sum of column
avg(col)Future<num>Average of column
max(col)Future<dynamic>Maximum value
min(col)Future<dynamic>Minimum value
exists()Future<bool>Any records exist?
doesntExist() Future<bool> No records exist?

Modification#

MethodReturnsDescription
delete() Future<int> Delete matching records (respects soft deletes)
forceDelete() Future<int> Permanently delete matching records
restore() Future<int> Restore soft-deleted records
update(values) Future<int> Update matching records
increment(col, [n]) Future<int> Increment column value
decrement(col, [n]) Future<int> Decrement column value

Debugging#

MethodReturnsDescription
toSql()StringGet the raw SQL string

Column Types & Modifiers#

Type Constructors#

ConstructorSQL TypeDescription
Column.integer()INTEGERInteger column
Column.bigInteger()BIGINTBig integer column
Column.smallInteger()SMALLINTSmall integer column
Column.string([len])VARCHAR(len)String column (default 255)
Column.text()TEXTUnlimited text column
Column.boolean()BOOLEANBoolean column
Column.date()DATEDate column
Column.time()TIMETime column
Column.dateTime()TIMESTAMPDateTime/timestamp column
Column.decimal([p, s])DECIMAL(p,s)Decimal column
Column.float()FLOATFloat column
Column.double_()DOUBLEDouble column
Column.json()JSONJSON column
Column.binary()BLOBBinary/blob column

Modifiers#

ModifierDescription
.primaryKey()Mark as primary key
.autoIncrement()Enable auto-increment
.notNull()Mark as NOT NULL
.nullable()Mark as nullable (default)
.unique()Add unique constraint
.defaultValue(val)Set default value
.references(table)Add foreign key reference
.onDelete(action)Set ON DELETE action
.onUpdate(action)Set ON UPDATE action

Relation Types#

TypeDescription
HasMany<T>(foreignKey: ...) One-to-many (e.g., Category has many Posts)
HasOne<T>(foreignKey: ...) One-to-one (e.g., User has one Profile)
BelongsTo<T>(foreignKey: ...)Inverse of has-many/has-one
BelongsToMany<T>(pivotTable: ..., foreignPivotKey: ..., relatedPivotKey: ...) Many-to-many through pivot table