diff --git a/core/modules/field/src/FieldConfigStorage.php b/core/modules/field/src/FieldConfigStorage.php index ff776cab2dec3f30b098bb3414eb9fc46c93c5ba..841942487f2de4c7479af5e84fb9a6d9b170cdc3 100644 --- a/core/modules/field/src/FieldConfigStorage.php +++ b/core/modules/field/src/FieldConfigStorage.php @@ -97,19 +97,25 @@ public function loadByProperties(array $conditions = array()) { $include_deleted = isset($conditions['include_deleted']) ? $conditions['include_deleted'] : FALSE; unset($conditions['include_deleted']); - // Get fields stored in configuration. - if (isset($conditions['entity_type']) && isset($conditions['field_name'])) { - // Optimize for the most frequent case where we do have a specific ID. - $id = $conditions['entity_type'] . $conditions['field_name']; - $fields = $this->loadMultiple(array($id)); - } - else { - // No specific ID, we need to examine all existing fields. - $fields = $this->loadMultiple(); + $fields = array(); + + // Get fields stored in configuration. If we are explicitly looking for + // deleted fields only, this can be skipped, because they will be retrieved + // from state below. + if (empty($conditions['deleted'])) { + if (isset($conditions['entity_type']) && isset($conditions['field_name'])) { + // Optimize for the most frequent case where we do have a specific ID. + $id = $conditions['entity_type'] . $conditions['field_name']; + $fields = $this->loadMultiple(array($id)); + } + else { + // No specific ID, we need to examine all existing fields. + $fields = $this->loadMultiple(); + } } // Merge deleted fields (stored in state) if needed. - if ($include_deleted) { + if ($include_deleted || !empty($conditions['deleted'])) { $deleted_fields = $this->state->get('field.field.deleted') ?: array(); foreach ($deleted_fields as $id => $config) { $fields[$id] = $this->create($config); diff --git a/core/modules/field/src/FieldInstanceConfigStorage.php b/core/modules/field/src/FieldInstanceConfigStorage.php index e9b15dca5a6e19791aaa213dc72e2e990bc67459..20dc083089c29d59a93cf1962080deba111998de 100644 --- a/core/modules/field/src/FieldInstanceConfigStorage.php +++ b/core/modules/field/src/FieldInstanceConfigStorage.php @@ -104,19 +104,25 @@ public function loadByProperties(array $conditions = array()) { $include_deleted = isset($conditions['include_deleted']) ? $conditions['include_deleted'] : FALSE; unset($conditions['include_deleted']); - // Get instances stored in configuration. - if (isset($conditions['entity_type']) && isset($conditions['bundle']) && isset($conditions['field_name'])) { - // Optimize for the most frequent case where we do have a specific ID. - $id = $conditions['entity_type'] . '.' . $conditions['bundle'] . '.' . $conditions['field_name']; - $instances = $this->loadMultiple(array($id)); - } - else { - // No specific ID, we need to examine all existing instances. - $instances = $this->loadMultiple(); + $instances = array(); + + // Get instances stored in configuration. If we are explicitly looking for + // deleted instances only, this can be skipped, because they will be + // retrieved from state below. + if (empty($conditions['deleted'])) { + if (isset($conditions['entity_type']) && isset($conditions['bundle']) && isset($conditions['field_name'])) { + // Optimize for the most frequent case where we do have a specific ID. + $id = $conditions['entity_type'] . '.' . $conditions['bundle'] . '.' . $conditions['field_name']; + $instances = $this->loadMultiple(array($id)); + } + else { + // No specific ID, we need to examine all existing instances. + $instances = $this->loadMultiple(); + } } // Merge deleted instances (stored in state) if needed. - if ($include_deleted) { + if ($include_deleted || !empty($conditions['deleted'])) { $deleted_instances = $this->state->get('field.instance.deleted') ?: array(); $deleted_fields = $this->state->get('field.field.deleted') ?: array(); foreach ($deleted_instances as $id => $config) {