private function processFields()
{
/** @var Column[] $internalFields */
$internalFields = $this->configuration['fields'];
$fields = [];
foreach ($internalFields as $name => $field) {
// skip if field is no instance of Column
if (!$field instanceof Column) {
continue;
}
//set table name as key
if ($field->getName() !== $name) {
$name = $field->getName();
}
$fields[$name] = $field;
}
$reflectionClass = new \ReflectionClass($this->getEntity());
$entityProperties = $reflectionClass->getProperties();
foreach ($entityProperties as $key => $value) {
// disallow static properties
if ($value->isStatic()) {
continue;
}
// skip dynamic column declaration
$fieldName = $value->getName();
if (array_key_exists($fieldName, $fields) || array_key_exists(Inflector::camelize($fieldName), $fields) || array_key_exists(Inflector::tableize($fieldName), $fields)) {
continue;
}
$fields[$fieldName] = new Column($fieldName, Type::getType(Type::STRING));
}
//remove all relations
$relations = $this->getRelations();
foreach ($fields as $key => $value) {
if (array_key_exists($key, $relations)) {
unset($fields[$key]);
}
}
$this->configuration['fields'] = $fields;
}