duxt_orm library
DuxtOrm - ActiveRecord-style ORM for Duxt framework.
Supports PostgreSQL, MySQL, and SQLite with GORM-like auto-migrations.
Quick Start
import 'package:duxt_orm/duxt_orm.dart';
// 1. Define your model (extend Entity)
class User extends Entity {
int? _id;
String? email;
String? name;
User({int? id, this.email, this.name}) : _id = id;
@override dynamic get id => _id;
@override set id(dynamic value) => _id = value as int?;
@override
Map<String, dynamic> toMap() => {'email': email, 'name': name};
factory User.fromRow(Map<String, dynamic> row) => User(
id: row['id'] as int?,
email: row['email'] as String?,
name: row['name'] as String?,
);
static void register() => Entity.registerModel[User](User.fromRow, schema: {
'id': Column.integer().primaryKey().autoIncrement(),
'email': Column.string(255).unique().notNull(),
'name': Column.string(100).notNull(),
});
}
// 2. Initialize
User.register();
await DuxtOrm.init(DuxtConfig.database);
await DuxtOrm.migrate();
// 3. Use Model[T] for queries - Rails-like syntax!
final users = Model[User]();
final all = await users.all();
final user = await users.find(1);
final admins = await users.where('role', 'admin').get();
await users.create({'email': 'test@example.com', 'name': 'Test'});
ModelT Query API
final posts = Model[Post]();
// CRUD
await posts.all();
await posts.find(1);
await posts.create({'title': 'Hello'});
// Query Builder
await posts.where('published', true).get();
await posts.where('views', 100, '>').orderByDesc('created_at').limit(10).get();
// Aggregates
await posts.count();
await posts.where('published', true).count();
Relations
class Post extends Entity {
int? categoryId;
Category? get category => getRelation[Category]('category');
static void register() {
Entity.registerModel[Post](Post.fromRow, schema: {...});
Entity.registerRelation[Post]('category', BelongsTo[Category](foreignKey: 'category_id'));
}
}
// Eager load relations
final posts = await Model[Post]().include(['category']).get();
print(posts.first.category?.name);
Classes
-
BelongsTo<
T extends Entity> - Defines a "belongs to" relationship.
-
BelongsToMany<
T extends Entity> - Defines a "belongs to many" (many-to-many) relationship.
- Column
- Column definition for schema.
- DatabaseAdapter
- Database adapter interface.
- DuxtOrm
- DuxtOrm - ActiveRecord-style ORM for Duxt framework.
- Entity
- Base class for all ORM models.
-
HasMany<
T extends Entity> - Defines a "has many" relationship.
-
HasOne<
T extends Entity> - Defines a "has one" relationship.
- Migrator
- Database migration helper.
-
Model<
T extends Entity> - Query interface for models - provides clean Rails-like syntax.
- MySqlAdapter
- MySQL database adapter.
- PostgresAdapter
- PostgreSQL database adapter.
-
QueryBuilder<
T extends Entity> - Fluent query builder for constructing SQL queries.
- QueryResult
- Database adapter interface and related classes for DuxtOrm. Result from a database query.
-
Relation<
T extends Entity> - Base class for all relation definitions.
- Schema
- Schema definition for a model.
- SqliteAdapter
- SQLite database adapter.
- Transaction
- Transaction interface.
Enums
- ColumnType
- Column type definitions for schema.
Typedefs
Exceptions / Errors
- RecordNotFoundException
- Exception thrown when a record is not found.