protected function loadRelationsAttributesRecursive(Model $model)
{
$attributes = $model->getAttributes();
foreach ($attributes as $key => $value) {
if (method_exists($model, $key)) {
$reflection_method = new ReflectionMethod($model, $key);
if ($reflection_method->class != "Illuminate\\Database\\Eloquent\\Model") {
$relation = $model->{$key}();
if ($relation instanceof Relation) {
// Get the relation models/model if value is not null
if ($value === null) {
$models = null;
} else {
// Check if the relation field is single model or collections
if (!($multiLevelRelation = $this->isMultiLevelArray($value))) {
$value = [$value];
}
$models = $this->hydrateRecursive($relation->getModel(), $value, $relation);
if (!$multiLevelRelation) {
$models = $models->first();
}
}
// Unset attribute before setting relation
unset($model[$key]);
// Set the relation value
$model->setRelation($key, $models);
}
}
}
}
}