loadRelations static method

Future<void> loadRelations(
  1. List<KhademModel> models,
  2. List relations
)

Loads relations based on parsed metadata.

This is the main entry point for eager loading. It processes each relation specification and delegates to the appropriate loading method based on the relation type defined in the model's relation definitions.

Parameters:

  • models: List of parent models to load relations for
  • relations: List of relation specifications (passed to parseRelations)

The loaded relations are attached to each model via the model's relation property.

Implementation

static Future<void> loadRelations(
  List<KhademModel> models,
  List<dynamic> relations,
) async {
  if (models.isEmpty) return;

  final parsed = parseRelations(relations);
  for (final meta in parsed) {
    final relationName = meta.key;
    final firstModel = models.first;

    try {
      final relationObj = (firstModel as HasRelations).relation(relationName);

      relationObj.addEagerConstraints(models);

      if (meta.query != null) {
        meta.query!(relationObj.getQuery());
      }

      // Execute query
      final results = await relationObj.getQuery().get();

      // Match results
      relationObj.match(models, results, relationName);

      // Handle nested relations
      if (meta.nested.isNotEmpty) {
        await loadRelations(results.cast<KhademModel>(), meta.nested);
      }
    } catch (e) {
      rethrow;
    }
  }
}