saveManyRelation<TRelated extends Model<TRelated>> method

Future<List<TRelated>> saveManyRelation<TRelated extends Model<TRelated>>(
  1. String relationName,
  2. List<TRelated> related
)
inherited

Saves multiple related models through a hasMany relationship.

This sets the foreign key on each related model to point to this model, then persists all related models.

Example:

final author = await Author.query().find(1);
await author.saveManyRelation('posts', [
  Post(title: 'Post 1', publishedAt: DateTime.now()),
  Post(title: 'Post 2', publishedAt: DateTime.now()),
]);

Implementation

Future<List<TRelated>> saveManyRelation<TRelated extends Model<TRelated>>(
  String relationName,
  List<TRelated> related,
) async {
  final def = expectDefinition();

  final relationDef = def.relations.cast<RelationDefinition?>().firstWhere(
    (r) => r?.name == relationName,
    orElse: () => null,
  );

  if (relationDef == null) {
    throw ArgumentError(
      'Relation "$relationName" not found on ${def.modelName}',
    );
  }

  if (relationDef.kind != RelationKind.hasMany) {
    throw ArgumentError(
      'saveManyRelation() can only be used with hasMany relations. '
      'Relation "$relationName" is ${relationDef.kind}',
    );
  }

  final results = <TRelated>[];
  for (final model in related) {
    results.add(await saveRelation<TRelated>(relationName, model));
  }

  return results;
}