C
CanxJS
v1.6.2
  • Learn
  • Blog
  • Showcase
C
CanxJS

Ultra-fast async MVC backend framework for Bun. Build production-ready APIs with elegance and speed.

Resources

  • Documentation
  • Learn
  • Blog
  • Showcase

Documentation

  • Introduction
  • Installation
  • Core Concepts
  • CLI Commands
  • API Reference

Legal

  • Privacy Policy
  • Terms of Service

© 2026 CanxJS. All rights reserved.

Built with ❤️ for Candra Kirana

  • Models & ORM
  • Migrations
  • Seeders
  • Observers
Database

Model Observers

Centralize your model event listeners. Observers allow you to group event handling logic for a model into a single class.

Creating Observers

Observers are simple classes with methods corresponding to Eloquent events:creating, created, updating, updated,saving, saved, deleting, deleted.

observers/UserObserver.ts
1import { Observer } from 'canxjs';
2import { User } from '../models/User';
3
4export class UserObserver {
5 /**
6 * Handle the User "created" event.
7 */
8 async created(user: User) {
9 // Send welcome email
10 await Mail.to(user).send(new WelcomeEmail());
11 }
12
13 /**
14 * Handle the User "updating" event.
15 */
16 async updating(user: User) {
17 // Audit logic
18 if (user.isDirty('email')) {
19 console.log('Email changed by user ' + user.id);
20 }
21 }
22
23 /**
24 * Handle the User "deleted" event.
25 */
26 async deleted(user: User) {
27 // Cleanup related data
28 }
29}

Registering Observers

Register your observers in a Service Provider, typically in the boot method.

providers/AppServiceProvider.ts
1// src/providers/AppServiceProvider.ts
2import { User } from '../models/User';
3import { UserObserver } from '../observers/UserObserver';
4
5export class AppServiceProvider extends ServiceProvider {
6 async boot() {
7 User.observe(UserObserver);
8 }
9}

Inline Hooks

For simple logic, you can define static hook methods directly on the Model class.

models/User.ts
1// Inside your Model class
2export class User extends Model {
3
4 protected static async onCreating(model: User) {
5 if (!model.uuid) {
6 model.uuid = crypto.randomUUID();
7 }
8 }
9
10 protected static async onSaved(model: User) {
11 // ...
12 }
13}

Back to ORM