setRelationship<E extends Object> method

  1. @override
FutureOr<bool> setRelationship<E extends Object>(
  1. O o,
  2. String field,
  3. List<E> values, {
  4. TypeInfo? fieldType,
  5. Transaction? transaction,
})
override

Implementation

@override
FutureOr<bool> setRelationship<E extends Object>(
    O o, String field, List<E> values,
    {TypeInfo? fieldType, Transaction? transaction}) {
  checkNotClosed();

  fieldType ??= entityHandler.getFieldType(o, field)!;

  if (!fieldType.isListEntityOrReference) {
    throw StateError("Field `$field` not a `List` entity type: $fieldType");
  }

  var op = TransactionOperationStoreRelationship(name, this, o, values,
      transaction: transaction);

  var valuesType = fieldType.arguments0!.type;
  var valuesRepository = provider.getEntityRepository<E>(type: valuesType)!;
  var valuesEntityHandler = valuesRepository.entityHandler;

  var oId = getID(o, entityHandler: entityHandler);
  var valuesIds = values.map((e) => valuesEntityHandler.getID(e));

  var valuesIdsNotNull = IterableNullableExtension(valuesIds).whereNotNull();

  return putRelationship(oId, valuesType, valuesIdsNotNull)
      .resolveMapped((ok) {
    op.finish(ok);
    return ok;
  });
}