toRelation method

Relation<T, KhademModel> toRelation(
  1. KhademModel parent,
  2. String relationName
)

Implementation

Relation<T, KhademModel> toRelation(KhademModel parent, String relationName) {
  final q = Khadem.db
      .table(relatedTable, modelFactory: (data) => factory()..fromJson(data));
  if (query != null) {
    query!(q);
  }

  switch (type) {
    case RelationType.hasOne:
      return HasOne<T, KhademModel>(q, parent, factory, foreignKey, localKey);
    case RelationType.hasMany:
      return HasMany<T, KhademModel>(
        q,
        parent,
        factory,
        foreignKey,
        localKey,
      );
    case RelationType.belongsTo:
      return BelongsTo<T, KhademModel>(
        q,
        parent,
        factory,
        foreignKey,
        ownerKey ?? 'id',
        relationName,
      );
    case RelationType.belongsToMany:
      return BelongsToMany<T, KhademModel>(
        q,
        parent,
        factory,
        pivotTable!,
        foreignPivotKey!,
        relatedPivotKey!,
        localKey,
        relatedKey ?? 'id',
      );
    case RelationType.morphOne:
      return MorphOne<T, KhademModel>(
        q,
        parent,
        factory,
        morphTypeField!,
        morphIdField!,
        localKey,
      );
    case RelationType.morphMany:
      return MorphMany<T, KhademModel>(
        q,
        parent,
        factory,
        morphTypeField!,
        morphIdField!,
        localKey,
      );
    case RelationType.hasOneThrough:
      return HasOneThrough<T, KhademModel>(
        q,
        parent,
        factory,
        throughTable!,
        firstKey!,
        secondKey!,
        localKey,
        secondLocalKey!,
      );
    case RelationType.hasManyThrough:
      return HasManyThrough<T, KhademModel>(
        q,
        parent,
        factory,
        throughTable!,
        firstKey!,
        secondKey!,
        localKey,
        secondLocalKey!,
      );
    case RelationType.morphToMany:
      return MorphToMany<T, KhademModel>(
        q,
        parent,
        factory,
        pivotTable!,
        foreignPivotKey!,
        relatedPivotKey!,
        localKey,
        relatedKey ?? 'id',
        morphTypeField!,
        parent.table,
      );
    case RelationType.morphedByMany:
      return MorphedByMany<T, KhademModel>(
        q,
        parent,
        factory,
        pivotTable!,
        foreignPivotKey!,
        relatedPivotKey!,
        localKey,
        relatedKey ?? 'id',
        morphTypeField!,
        q.table,
      );
    case RelationType.morphTo:
      final morphClass = factory().runtimeType.toString();
      return MorphTo<T, KhademModel>(
        q,
        parent,
        factory,
        morphTypeField!,
        morphIdField!,
        morphClass,
        ownerKey ?? 'id',
        relationName,
      );
  }
}