deserialize method
List<Map<String, dynamic> >
deserialize({
- required List<
Map< rows,String, dynamic> > - required String baseModel,
- required Map<
String, ColumnAlias> columnAliases, - required List<
IncludedRelation> includedRelations,
Deserialize flat rows into nested structure.
rows - Flat rows from JOIN query.
baseModel - The base model name.
columnAliases - Column alias mapping.
includedRelations - List of included relations.
Returns list of nested objects.
Implementation
List<Map<String, dynamic>> deserialize({
required List<Map<String, dynamic>> rows,
required String baseModel,
required Map<String, ColumnAlias> columnAliases,
required List<IncludedRelation> includedRelations,
}) {
if (rows.isEmpty) return [];
// Group rows by base model primary key
final model = _schema.getModel(baseModel);
if (model == null) return rows;
final pkFields = model.primaryKeys;
if (pkFields.isEmpty) return rows;
final pkColumn = pkFields.first.columnName;
// Group by primary key
final grouped = <dynamic, List<Map<String, dynamic>>>{};
for (final row in rows) {
final pk = row[pkColumn];
(grouped[pk] ??= []).add(row);
}
// Build result for each unique base record
return grouped.entries.map((entry) {
final rowGroup = entry.value;
final baseRow = _extractBaseColumns(rowGroup.first, columnAliases);
// Add relations
for (final relation in includedRelations) {
baseRow[relation.name] = _extractRelation(
rows: rowGroup,
relation: relation,
columnAliases: columnAliases,
);
}
return baseRow;
}).toList();
}