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.