diff --git a/core/modules/field/field.crud.inc b/core/modules/field/field.crud.inc index 77b3e24..debbabb 100644 --- a/core/modules/field/field.crud.inc +++ b/core/modules/field/field.crud.inc @@ -360,8 +360,20 @@ function field_read_fields($params = array(), $include_additional = array()) { $params['storage_active'] = 1; } - // Get configuration fields. - $config_fields = entity_load_multiple('field_entity'); + // Get fields. + $ceq = drupal_container()->get('entity.query'); + $fields_query = $ceq->get('field_entity'); + foreach ($params as $key => $value) { + $fields_query->condition($key, $value); + } + $config_field_names = $fields_query->execute(); + + // In case we have params but no entities were found, return immediately. + if (empty($config_field_names) && !empty($params)) { + return $fields; + } + + $config_fields = entity_load_multiple('field_entity', $config_field_names); // Merge deleted fields. if (!empty($deleted_fields)) { @@ -370,13 +382,6 @@ function field_read_fields($params = array(), $include_additional = array()) { foreach ($config_fields as $field) { - // Conditions. - foreach ($params as $key => $value) { - if ($field[$key] != $value) { - continue 2; - } - } - // Invoke read field. module_invoke_all('field_read_field', $field);