protected function createArray($defdetail, $model) { $array = array(); foreach ($defdetail->sub_definition as $sub_def_detail) { if ($sub_def_detail->sub_definition->count() > 0) { $datamap = new DataMapping(); $datamap->load($sub_def_detail->data_mapping_id); $hasMany = is_null($datamap->internal_attribute) ? '' : $model->getHasMany($datamap->internal_attribute); if (!empty($hasMany) && $model->{$datamap->internal_attribute}->count() > 0) { foreach ($model->{$datamap->internal_attribute} as $submodel) { $array[$sub_def_detail->element][] = $this->createArray($sub_def_detail, $submodel); } } else { $array[$sub_def_detail->element] = $this->createArray($sub_def_detail, $model); } } else { $datamap = new DataMapping(); $datamap->load($sub_def_detail->data_mapping_id); $datamaprule = new DataMappingRule(); $datamaprule->load($sub_def_detail->data_mapping_rule_id); $value = ''; if ($datamap->isLoaded()) { if ($datamaprule->isLoaded()) { $datamapdetail = new DataMappingDetail(); $value = $datamapdetail->translateCode($datamaprule->id, $model->{$datamap->internal_attribute}, 'OUT'); } elseif (get_class($model) != $datamap->internal_type) { if (method_exists($datamap->internal_type, $datamap->internal_attribute)) { $value = call_user_func(array($datamap->internal_type, $datamap->internal_attribute)); } else { $attr = (is_null($datamap->internal_type) ? '' : $datamap->internal_type . '::') . $datamap->internal_attribute; eval("\$value= {$attr};"); } } elseif (method_exists($model, $datamap->internal_attribute)) { $value = call_user_func(array($model, $datamap->internal_attribute)); } elseif (is_object($model)) { $attr = '$model->' . $datamap->internal_attribute; eval("\$value= {$attr};"); } } elseif (!is_null($sub_def_detail->default_value)) { $value = $sub_def_detail->default_value; } $array[$sub_def_detail->element] = !empty($value) ? str_replace("'", '', $value) : $value; } } return $array; }