function FieldStorageConfigStorage::loadByProperties

Same name in other branches
  1. 8.9.x core/modules/field/src/FieldStorageConfigStorage.php \Drupal\field\FieldStorageConfigStorage::loadByProperties()
  2. 10 core/modules/field/src/FieldStorageConfigStorage.php \Drupal\field\FieldStorageConfigStorage::loadByProperties()
  3. 11.x core/modules/field/src/FieldStorageConfigStorage.php \Drupal\field\FieldStorageConfigStorage::loadByProperties()

Overrides EntityStorageBase::loadByProperties

File

core/modules/field/src/FieldStorageConfigStorage.php, line 102

Class

FieldStorageConfigStorage
Storage handler for "field storage" configuration entities.

Namespace

Drupal\field

Code

public function loadByProperties(array $conditions = []) {
    // Include deleted fields if specified in the $conditions parameters.
    $include_deleted = $conditions['include_deleted'] ?? FALSE;
    unset($conditions['include_deleted']);
    
    /** @var \Drupal\field\FieldStorageConfigInterface[] $storages */
    $storages = [];
    // Get field storages living in configuration. If we are explicitly looking
    // for deleted storages only, this can be skipped, because they will be
    // retrieved from the deleted fields repository 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'];
            $storages = $this->loadMultiple([
                $id,
            ]);
        }
        else {
            // No specific ID, we need to examine all existing storages.
            $storages = $this->loadMultiple();
        }
    }
    // Merge deleted field storage definitions from the deleted fields
    // repository if needed.
    if ($include_deleted || !empty($conditions['deleted'])) {
        $deleted_storage_definitions = $this->deletedFieldsRepository
            ->getFieldStorageDefinitions();
        foreach ($deleted_storage_definitions as $id => $field_storage_definition) {
            if ($field_storage_definition instanceof FieldStorageConfigInterface) {
                $storages[$id] = $field_storage_definition;
            }
        }
    }
    // Collect matching fields.
    $matches = [];
    foreach ($storages as $field) {
        foreach ($conditions as $key => $value) {
            // Extract the actual value against which the condition is checked.
            $checked_value = $field->get($key);
            // Skip to the next field as soon as one condition does not match.
            if ($checked_value != $value) {
                continue 2;
            }
        }
        // When returning deleted fields, key the results by UUID since they can
        // include several fields with the same ID.
        $key = $include_deleted ? $field->uuid() : $field->id();
        $matches[$key] = $field;
    }
    return $matches;
}

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