loxia 0.0.8 copy "loxia: ^0.0.8" to clipboard
loxia: ^0.0.8 copied to clipboard

A lightweight Dart ORM for Relational Databases built to be simple and extensible.

example/loxia_example.dart

import 'package:loxia/loxia.dart';

// Define a simple entity
class User extends Entity {
  User({this.id, required this.email});

  int? id;
  String email;

  static EntityDescriptor<User> get entity => EntityDescriptor<User>(
    entityType: User,
    tableName: 'users',
    columns: [
      ColumnDescriptor(
        name: 'id',
        propertyName: 'id',
        type: ColumnType.integer,
        nullable: true,
        isPrimaryKey: true,
        autoIncrement: true,
      ),
      ColumnDescriptor(
        name: 'email',
        propertyName: 'email',
        type: ColumnType.text,
        nullable: false,
        unique: true,
      ),
    ],
    relations: const [],
    fromRow: (row) =>
        User(id: row['id'] as int?, email: row['email'] as String),
    toRow: (u) => {'id': u.id, 'email': u.email},
    fieldsContext: const UserFieldsContext(),
  );
}

class UserFieldsContext extends QueryFieldsContext<User> {
  const UserFieldsContext([super.runtime, super.alias]);

  QueryField<int?> get id => field('id');
  QueryField<String> get email => field('email');

  @override
  QueryFieldsContext<User> bind(QueryRuntimeContext runtime, String alias) {
    return UserFieldsContext(runtime, alias);
  }
}

class UserInsertDto extends InsertDto<User> {
  UserInsertDto({required this.email});

  final String email;

  @override
  Map<String, dynamic> toMap() {
    return {'email': email};
  }
}

Future<void> main() async {
  final ds = DataSource(
    DataSourceOptions(
      engine: SqliteEngine.inMemory(),
      entities: [User.entity],
      runMigrations: true,
    ),
  );
  await ds.init();

  final users = ds.getRepository<User>();

  // Insert a user
  final newUser = User(email: 'john.doe@example.com');
  await users.insert(UserInsertDto(email: newUser.email));

  // Query it back
  final found = await users.find(
    where: queryWhere<User>(
      (q) => q.field<String>('email').equals('john.doe@example.com'),
    ),
  );

  for (final u in found) {
    print('User: id=${u.id}, email=${u.email}');
  }

  await ds.dispose();
}
4
likes
160
points
39
downloads

Publisher

verified publisherserinus.app

Weekly Downloads

A lightweight Dart ORM for Relational Databases built to be simple and extensible.

Homepage
Repository (GitHub)
View/report issues

Topics

#orm #sqlite #postgres #database

Documentation

Documentation
API reference

Funding

Consider supporting this project:

github.com

License

MIT (license)

Dependencies

analyzer, build, build_runner, code_builder, dart_style, glob, path, postgres, source_gen, sqlite3

More

Packages that depend on loxia