belongsToOne<T extends Model> method
- DatabaseDisk disk = Model.defaultDisk,
Resolves the parent model for an inverse relationship.
This method reads the foreign key stored on the current model, then loads
the related parent model by uuid or id depending on disk.
Returns the parent model when found, otherwise null.
Example:
final author = await post.belongsToOne<User>();
if (author != null) {
print(author.email);
}
Implementation
Future<T?> belongsToOne<T extends Model>({DatabaseDisk disk = Model.defaultDisk}) async {
try {
final foreignTableSingular = Model.getTableSingularName<T>();
final data = toMetaJson();
switch (disk) {
case DatabaseDisk.file:
case DatabaseDisk.s3:
final foreignUuidKey = "${foreignTableSingular}_uuid";
final val = data[foreignUuidKey];
if (val == null) return null;
return Model.firstWhere<T>(field: "uuid", value: val, disk: disk);
case DatabaseDisk.sqlite:
case DatabaseDisk.pgsql:
final foreignIdKey = "${foreignTableSingular}_id";
final val = data[foreignIdKey];
if (val == null) return null;
return Model.firstWhere<T>(field: "id", value: val, disk: disk);
}
} catch (e, stack) {
App().archeryLogger.error("Error resolving belongsToOne", {"origin": "ext ModelRelationships belongsToOne", "error": e.toString(), "stack": stack.toString()});
return null;
}
}