hasMany<T extends Model> method
- 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 [];
}
}