function FieldInfo::getFieldMap

Collects a lightweight map of fields across bundles.

Return value

An array keyed by field name. Each value is an array with two entries:

  • type: The field type.
  • bundles: The bundles in which the field appears, as an array with entity types as keys and the array of bundle names as values.
1 call to FieldInfo::getFieldMap()
FieldInfo::prepareField in modules/field/field.info.class.inc
Prepares a field definition for the current run-time context.

File

modules/field/field.info.class.inc, line 123

Class

FieldInfo
Provides field and instance definitions for the current runtime environment.

Code

public function getFieldMap() {
    // Read from the "static" cache.
    if ($this->fieldMap !== NULL) {
        return $this->fieldMap;
    }
    // Read from persistent cache.
    if ($cached = cache_get('field_info:field_map', 'cache_field')) {
        $map = $cached->data;
        // Save in "static" cache.
        $this->fieldMap = $map;
        return $map;
    }
    $map = array();
    $query = db_query('SELECT fc.type, fci.field_name, fci.entity_type, fci.bundle FROM {field_config_instance} fci INNER JOIN {field_config} fc ON fc.id = fci.field_id WHERE fc.active = 1 AND fc.storage_active = 1 AND fc.deleted = 0 AND fci.deleted = 0 ORDER BY bundle, entity_type');
    foreach ($query as $row) {
        $map[$row->field_name]['bundles'][$row->entity_type][] = $row->bundle;
        $map[$row->field_name]['type'] = $row->type;
    }
    // Save in "static" and persistent caches.
    $this->fieldMap = $map;
    if (lock_acquire('field_info:field_map')) {
        cache_set('field_info:field_map', $map, 'cache_field');
        lock_release('field_info:field_map');
    }
    return $map;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.