InfyOm\Generator\Utils\TableFieldsGenerator::generateFieldsFromTable PHP Method

generateFieldsFromTable() public static method

public static generateFieldsFromTable ( $tableName )
    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;
    }

Usage Example

 private function getInputFromTable()
 {
     $tableName = $this->dynamicVars['$TABLE_NAME$'];
     $this->inputFields = TableFieldsGenerator::generateFieldsFromTable($tableName);
     $this->checkForDiffPrimaryKey();
 }