public function getFieldTypes()
    {
        static $cached = [];

        $class = static::class;

        if (!isset($cached[$class])) {
            if (!$doc = static::sample()) {

                if (!$docs = $this->getConnection()->fetchAll($this->getSource(), [], ['limit' => 1])) {
                    throw new RuntimeException(['`:collection` collection has none record', 'collection' => $this->getSource()]);
                }
                $doc = $docs[0];
            }

            $types = [];
            foreach ($doc as $field => $value) {
                $type = gettype($value);
                if ($type === 'integer') {
                    $types[$field] = 'int';
                } elseif ($type === 'string') {
                    $types[$field] = 'string';
                } elseif ($type === 'double') {
                    $types[$field] = 'float';
                } elseif ($type === 'boolean') {
                    $types[$field] = 'bool';
                } elseif ($type === 'array') {
                    $types[$field] = 'array';
                } elseif ($value instanceof ObjectID) {
                    if ($field === '_id') {
                        continue;
                    }
                    $types[$field] = 'objectid';
                } else {
                    throw new RuntimeException(['`:field` field value type can not be infered.', 'field' => $field]);
                }
            }

            $cached[$class] = $types;
        }

        return $cached[$class];
    }
public function getFieldTypes()
    {
        static $cached = [];

        $class = static::class;

        if (!isset($cached[$class])) {
            if (!$doc = static::sample()) {

                if (!$docs = $this->getConnection()->fetchAll($this->getSource(), [], ['limit' => 1])) {
                    throw new RuntimeException(['`:collection` collection has none record', 'collection' => $this->getSource()]);
                }
                $doc = $docs[0];
            }

            $types = [];
            foreach ($doc as $field => $value) {
                $type = gettype($value);
                if ($type === 'integer') {
                    $types[$field] = 'int';
                } elseif ($type === 'string') {
                    $types[$field] = 'string';
                } elseif ($type === 'double') {
                    $types[$field] = 'float';
                } elseif ($type === 'boolean') {
                    $types[$field] = 'bool';
                } elseif ($type === 'array') {
                    $types[$field] = 'array';
                } elseif ($value instanceof ObjectID) {
                    if ($field === '_id') {
                        continue;
                    }
                    $types[$field] = 'objectid';
                } else {
                    throw new RuntimeException(['`:field` field value type can not be infered.', 'field' => $field]);
                }
            }

            $cached[$class] = $types;
        }

        return $cached[$class];
    }
public function getFieldTypes ( ) { static $ cached = [ ] ; $ class = static :: class ; if ( ! isset ( $ cached [ $ class ] ) ) { if ( ! $ doc = static :: sample ( ) ) { if ( ! $ docs = $ this -> getConnection ( ) -> fetchAll ( $ this -> getSource ( ) , [ ] , [ 'limit' => 1 ] ) ) { throw new RuntimeException ( [ '`:collection` collection has none record' , 'collection' => $ this -> getSource ( ) ] ) ; } $ doc = $ docs [ 0 ] ; } $ types = [ ] ; foreach ( $ doc as $ field => $ value ) { $ type = gettype ( $ value ) ; if ( $ type === 'integer' ) { $ types [ $ field ] = 'int' ; } elseif ( $ type === 'string' ) { $ types [ $ field ] = 'string' ; } elseif ( $ type === 'double' ) { $ types [ $ field ] = 'float' ; } elseif ( $ type === 'boolean' ) { $ types [ $ field ] = 'bool' ; } elseif ( $ type === 'array' ) { $ types [ $ field ] = 'array' ; } elseif ( $ value instanceof ObjectID ) { if ( $ field === '_id' ) { continue ; } $ types [ $ field ] = 'objectid' ; } else { throw new RuntimeException ( [ '`:field` field value type can not be infered.' , 'field' => $ field ] ) ; } } $ cached [ $ class ] = $ types ; } return $ cached [ $ class ] ; }
bool, int, float, string, array, objectid

@return array
bool int float string array objectid