hasMany<T extends Model> method

Future<List<T>> hasMany<T extends Model>({
  1. DatabaseDisk disk = Model.defaultDisk,
})

Resolves all one-to-many related models.

Related models are queried using the current model's identifier and conventional foreign-key naming for the selected disk.

Returns an empty list when no related models are found or resolution fails.

Example:

final comments = await post.hasMany<Comment>();
print(comments.length);

Implementation

Future<List<T>> hasMany<T extends Model>({DatabaseDisk disk = Model.defaultDisk}) async {
  try {
    final foreignTableSingular = getInstanceTableSingularName();
    final data = toMetaJson();

    switch (disk) {
      case DatabaseDisk.file:
      case DatabaseDisk.s3:
        final foreignUuidKey = "${foreignTableSingular}_uuid";
        return Model.where<T>(field: foreignUuidKey, value: data['uuid'], disk: disk);

      case DatabaseDisk.sqlite:
      case DatabaseDisk.pgsql:
        final foreignIdKey = "${foreignTableSingular}_id";
        return Model.where<T>(field: foreignIdKey, value: data['id'], disk: disk);
    }
  } catch (e, stack) {
    App().archeryLogger.error("Error resolving hasMany", {"origin": "ext ModelRelationships hasMany", "error": e.toString(), "stack": stack.toString()});
    return [];
  }
}