public static function generateFieldsFromTable($tableName)
{
$schema = DB::getDoctrineSchemaManager();
$platform = $schema->getDatabasePlatform();
$platform->registerDoctrineTypeMapping('enum', 'string');
$columns = $schema->listTableColumns($tableName);
$primaryKey = static::getPrimaryKeyFromTable($tableName);
$timestamps = static::getTimestampFieldNames();
$defaultSearchable = config('infyom.laravel_generator.options.tables_searchable_default', false);
$fields = [];
foreach ($columns as $column) {
switch ($column->getType()->getName()) {
case 'integer':
$fieldInput = self::generateIntFieldInput($column->getName(), 'integer', $column);
$type = 'number';
break;
case 'smallint':
$fieldInput = self::generateIntFieldInput($column->getName(), 'smallInteger', $column);
$type = 'number';
break;
case 'bigint':
$fieldInput = self::generateIntFieldInput($column->getName(), 'bigInteger', $column);
$type = 'number';
break;
case 'boolean':
$fieldInput = self::generateSingleFieldInput($column->getName(), 'boolean');
$type = 'text';
break;
case 'datetime':
$fieldInput = self::generateSingleFieldInput($column->getName(), 'dateTime');
$type = 'date';
break;
case 'datetimetz':
$fieldInput = self::generateSingleFieldInput($column->getName(), 'dateTimeTz');
$type = 'date';
break;
case 'date':
$fieldInput = self::generateSingleFieldInput($column->getName(), 'date');
$type = 'date';
break;
case 'time':
$fieldInput = self::generateSingleFieldInput($column->getName(), 'time');
$type = 'text';
break;
case 'decimal':
$fieldInput = self::generateDecimalInput($column);
$type = 'number';
break;
case 'float':
$fieldInput = self::generateFloatInput($column);
$type = 'number';
break;
case 'string':
$fieldInput = self::generateStringInput($column);
$type = 'text';
break;
case 'text':
$fieldInput = self::generateTextInput($column);
$type = 'textarea';
break;
default:
$fieldInput = self::generateTextInput($column);
$type = 'text';
}
if (strtolower($column->getName()) == 'password') {
$type = 'password';
} elseif (strtolower($column->getName()) == 'email') {
$type = 'email';
}
if (!empty($fieldInput)) {
$field = GeneratorFieldsInputUtil::processFieldInput($fieldInput, $type, '', ['searchable' => $defaultSearchable]);
$columnName = $column->getName();
if ($columnName === $primaryKey) {
$field['primary'] = true;
$field['inFrom'] = false;
$field['inIndex'] = false;
$field['fillable'] = false;
$field['searchable'] = false;
} elseif (in_array($columnName, $timestamps)) {
$field['fillable'] = false;
$field['searchable'] = false;
$field['inFrom'] = true;
$field['inIndex'] = true;
}
$fields[] = $field;
}
}
return $fields;
}