belongsToMany<T extends Model> method
Implementation
Future<List<T>> belongsToMany<T extends Model>({required PivotTable table, DatabaseDisk disk = Model.defaultDisk}) async {
try {
final pivotTableName = table.name;
final childPrefix = getInstanceTableSingularName();
final siblingPrefix = Model.getTableSingularName<T>();
switch (disk) {
case DatabaseDisk.sqlite:
final constructor = SQLiteModel.migrations[T];
if (constructor == null) return [];
final sqliteDB = App().container.make<SQLiteDatabase>();
// e.g user_role pivot table
final childField = "${childPrefix}_id";
final siblingField = "${siblingPrefix}_id";
//
final pivotRecords = await sqliteDB.query(pivotTableName, where: '$childField = ?', whereArgs: [id]);
final siblingIDs = pivotRecords.map((record) => record[siblingField]).toList();
final idsString = siblingIDs.join(",");
final siblingsRecords = await sqliteDB.query(Model.getTableName<T>(), columns: ['id'], where: 'id IN ($idsString)', whereArgs: siblingIDs);
return siblingsRecords.map((sibling) => constructor(sibling) as T).toList();
case DatabaseDisk.file:
// TODO: Handle case.
throw UnimplementedError();
case DatabaseDisk.pgsql:
// TODO: Handle case.
throw UnimplementedError();
case DatabaseDisk.s3:
// TODO: Handle case.
throw UnimplementedError();
}
} catch(e, stack) {
App().archeryLogger.error("Error resolving belongsToMany", {"origin": "ext ModelRelationships belongsToMany", "error": e.toString(), "stack": stack.toString()});
return [];
}
}