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,
);
}
}