matchToMany method
List<Map<String, dynamic>>
matchToMany(
- List<Map<String, dynamic>> parents,
- List<Map<String, dynamic>> results,
- String relation,
- String parentLocalKey,
- String parentPivotKey,
- String relatedPivotKey, {
- List<String> pivotFields = const [],
})
Implementation
List<Map<String, dynamic>> matchToMany(
List<Map<String, dynamic>> parents,
List<Map<String, dynamic>> results,
String relation,
String parentLocalKey,
String parentPivotKey,
String relatedPivotKey, {
List<String> pivotFields = const [],
}) {
final lookup = <dynamic, List<Map<String, dynamic>>>{};
for (var row in results) {
final pivotVal = row[parentPivotKey];
lookup.putIfAbsent(pivotVal, () => []).add(row);
}
return parents.map((parent) {
final cloned = Map<String, dynamic>.from(parent);
final primaryVal = parent[parentLocalKey];
final joinedRows = lookup[primaryVal] ?? [];
final relatedList = joinedRows.map((row) {
final relatedData = Map<String, dynamic>.from(row)
..remove(parentPivotKey)
..remove(relatedPivotKey)
..removeWhere((k, _) => pivotFields.contains(k));
return relatedData;
}).toList();
cloned[relation] = relatedList;
return cloned;
}).toList();
}