Model Hooks & Lifecycle
Hooks allow you to run logic before or after certain model actions. They are static methods on your model.
Example: Soft Delete Filtering
import { Model, column } from 'hysteria-orm';
import { ModelQueryBuilder } from 'hysteria-orm';
export class User extends Model {
@column.integer({ primaryKey: true })
declare id: number;
@column()
declare name: string;
@column.date()
declare deletedAt: Date | null;
static beforeUpdate(queryBuilder: ModelQueryBuilder<User>): void {
queryBuilder.where('users.is_admin', false);
}
static beforeDelete(queryBuilder: ModelQueryBuilder<User>): void {
queryBuilder.where('users.is_admin', false);
}
static beforeFetch(queryBuilder: ModelQueryBuilder<User>): void {
queryBuilder.whereNull('users.deleted_at');
}
static beforeInsert(data: User[]): void {
data.isAdmin = false;
}
static afterFetch(data: User[]): User[] {
return data.filter((user) => user.deletedAt === null);
}
}
Available Hooks
Hook | Signature | Description |
---|---|---|
beforeFetch | static beforeFetch(queryBuilder: ModelQueryBuilder<T>) | Runs before fetching data. Modify query here. |
afterFetch | static async afterFetch(data: T[]): Promise<T[]> | Runs after fetching data. Can transform results. |
beforeInsert | static async beforeInsert(data: any): Promise<void> | Runs before inserting data. Can modify input. |
beforeUpdate | static beforeUpdate(queryBuilder: ModelQueryBuilder<T>) | Runs before updating data. Modify query here. |
beforeDelete | static beforeDelete(queryBuilder: ModelQueryBuilder<T>) | Runs before deleting data. Modify query here. |
- `