RelationalModel<T extends RelationalModel<T>> class abstract

Abstract base class that provides RelationalModel-style CRUD operations for any model.

Each model must:

  • provide a table name,
  • implement fromMap to hydrate itself from a row,
  • implement toMap to serialize itself for insert/update.
Implementers

Constructors

RelationalModel()

Properties

autoIncrementPrimary → bool
no setter
dbService → RelationalDatabaseAdapter
Universal DB service
no setter
hashCode → int
The hash code for this object.
no setterinherited
loadedIncludes ↔ Map<String, RelationScope>
Track which relations were included and loaded last
getter/setter pair
pivot ↔ Map<String, dynamic>?
getter/setter pair
primaryKey → String
no setter
resolvedRelations ↔ Map<String, dynamic>
getter/setter pair
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited
softDeletes → bool
no setter
table → String
Table name this model belongs to (e.g. "rooms", "bots").
no setter
timestamps → bool
no setter

Methods

all({dynamic include = const []}) → Future<List<T>>
Find multiple records by a list of IDs.
associate(String relName, RelationalModel<RelationalModel> parent) → void
attach(String relName, RelationalModel<RelationalModel> child) → void
HAS ONE / HAS MANY: parent.attach('hosts', child), sets FK on child, requires save()
attachMany(String relName, List<RelationalModel<RelationalModel>> children) → void
attachPivot(String relName, RelationalModel<RelationalModel> related, {Map<String, dynamic>? pivot}) → Future<void>
Attach with pivot table. Saved into db
delete({Map<String, dynamic>? where}) → Future<int>
Delete this model safely through RelationalModel.
detachPivot(String relName, dynamic relatedId) → Future<void>
Detach from pivot table by related model ID. Deleted from DB immediately.
find(dynamic pkValue, {dynamic include = const {}}) → Future<T?>
Find a record by primary key (id).
findMany(List pkValues, {dynamic include = const []}) → Future<List<T>>
Find multiple records by a list of IDs.
findOrFail(dynamic pkValue, {List<String> include = const []}) → Future<T>
Find a record by primary key (id) or throw if not found.
firstWhere(String column, dynamic value) → Future<T?>
Get the first record matching a condition.
fromJson(Map<String, dynamic> json) → T
fromMap(Map<String, dynamic> map) → T
getLoadedIncludePaths() → List<String>
Get names of loaded includes
getLoadedIncludes() → Map<String, RelationScope>
Get loaded includes
getRelation(String name) → dynamic
Get relation
getRelations() → dynamic
Get relations
hydrate(List<Map<String, dynamic>> rows) → Hydrator<T>
Hydrate method. Hydrate either a single row or many (no async here).
hydrateMany(List<Map<String, dynamic>> rows) → List<T>
Hydrate many rows into models (no query).
hydrateOne(Map<String, dynamic> row) → T
Hydrate a single row into a model (no query).
loadRelations(List<T> items, {dynamic include}) → Future<List<T>>
mergeIncludes(dynamic newIncludes, Map<String, RelationScope> existingIncludes) → Map<String, RelationScope>
mergeRelationScopes(RelationScope newScope, RelationScope? oldScope) → RelationScope
Merge relation scopes
normalizeIncludes(dynamic includesInput) → Map<String, RelationScope>
Normalize inputs
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
query() → Query<T>
refresh({dynamic include, bool append = true}) → Future<T>
Refresh model
relations() → Map<String, Relation<T, dynamic>>
Each model overrides this to declare relations
save({bool autoTimestamps = true, bool autoId = true}) → Future<T?>
Save itself, auto-generates UUID if needed, returns fresh hydrated model.
serialize() → Map<String, dynamic>
Serialize any model to Map (shortcut for toJson)
setAttribute(String column, dynamic value) → void
setLoadedIncludes(Map<String, RelationScope> includes) → void
Mark includes as loaded
setRelation(String name, dynamic value) → void
Set relation
toJson() → Map<String, dynamic>
toMap() → Map<String, dynamic>
toString() → String
A string representation of this object.
inherited
update({String? where, List? params}) → Future<int>
Update this model in the database.
updatePivot(String relName, dynamic relatedId, Map<String, dynamic> values) → Future<int>
Update pivot data between this model and a related model. Updates DB immediately. Does NOT reload models.
where(String column, dynamic value) → Future<List<T>>
Get all records matching a condition.

Operators

operator ==(Object other) → bool
The equality operator.
inherited

Static Methods

create<T extends RelationalModel<T>>(T model, Map<String, dynamic> data) → Future<T>
Create model from data
insert<T extends RelationalModel<T>>(T model, Map<String, dynamic> data) → Future<void>
Insert this model into the database. Returns the inserted row ID.
insertGetId<T extends RelationalModel<T>>(T model, Map<String, dynamic> data) → Future<int>
Insert and get id