function FieldStorageConfigStorage::loadByProperties

Same name and namespace in other branches
  1. 9 core/modules/field/src/FieldStorageConfigStorage.php \Drupal\field\FieldStorageConfigStorage::loadByProperties()
  2. 8.9.x 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.