class KeyValueEntityStorage in Zircon Profile 8
Same name and namespace in other branches
- 8.0 core/lib/Drupal/Core/Entity/KeyValueStore/KeyValueEntityStorage.php \Drupal\Core\Entity\KeyValueStore\KeyValueEntityStorage
Provides a key value backend for entities.
@todo Entities that depend on auto-incrementing serial IDs need to explicitly provide an ID until a generic wrapper around the functionality provided by \Drupal\Core\Database\Connection::nextId() is added and used. @todo Revisions are currently not supported.
Hierarchy
- class \Drupal\Core\Entity\EntityHandlerBase uses DependencySerializationTrait, StringTranslationTrait- class \Drupal\Core\Entity\EntityStorageBase implements EntityHandlerInterface, EntityStorageInterface- class \Drupal\Core\Entity\KeyValueStore\KeyValueEntityStorage
 
 
- class \Drupal\Core\Entity\EntityStorageBase implements EntityHandlerInterface, EntityStorageInterface
Expanded class hierarchy of KeyValueEntityStorage
1 file declares its use of KeyValueEntityStorage
- KeyValueEntityStorageTest.php in core/tests/ Drupal/ Tests/ Core/ Entity/ KeyValueStore/ KeyValueEntityStorageTest.php 
- Contains \Drupal\Tests\Core\Entity\KeyValueStore\KeyValueEntityStorageTest.
File
- core/lib/ Drupal/ Core/ Entity/ KeyValueStore/ KeyValueEntityStorage.php, line 29 
- Contains \Drupal\Core\Entity\KeyValueStore\KeyValueEntityStorage.
Namespace
Drupal\Core\Entity\KeyValueStoreView source
class KeyValueEntityStorage extends EntityStorageBase {
  /**
   * Length limit of the entity ID.
   */
  const MAX_ID_LENGTH = 128;
  /**
   * The key value store.
   *
   * @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
   */
  protected $keyValueStore;
  /**
   * The UUID service.
   *
   * @var \Drupal\Component\Uuid\UuidInterface
   */
  protected $uuidService;
  /**
   * The language manager.
   *
   * @var \Drupal\Core\Language\LanguageManagerInterface
   */
  protected $languageManager;
  /**
   * Constructs a new KeyValueEntityStorage.
   *
   * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
   *   The entity type.
   * @param \Drupal\Core\KeyValueStore\KeyValueStoreInterface $key_value_store
   *   The key value store.
   * @param \Drupal\Component\Uuid\UuidInterface $uuid_service
   *   The UUID service.
   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
   *   The language manager.
   */
  public function __construct(EntityTypeInterface $entity_type, KeyValueStoreInterface $key_value_store, UuidInterface $uuid_service, LanguageManagerInterface $language_manager) {
    parent::__construct($entity_type);
    $this->keyValueStore = $key_value_store;
    $this->uuidService = $uuid_service;
    $this->languageManager = $language_manager;
    // Check if the entity type supports UUIDs.
    $this->uuidKey = $this->entityType
      ->getKey('uuid');
  }
  /**
   * {@inheritdoc}
   */
  public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) {
    return new static($entity_type, $container
      ->get('keyvalue')
      ->get('entity_storage__' . $entity_type
      ->id()), $container
      ->get('uuid'), $container
      ->get('language_manager'));
  }
  /**
   * {@inheritdoc}
   */
  public function doCreate(array $values = array()) {
    // Set default language to site default if not provided.
    $values += array(
      $this
        ->getEntityType()
        ->getKey('langcode') => $this->languageManager
        ->getDefaultLanguage()
        ->getId(),
    );
    $entity = new $this->entityClass($values, $this->entityTypeId);
    // @todo This is handled by ContentEntityStorageBase, which assumes
    //   FieldableEntityInterface. The current approach in
    //   https://www.drupal.org/node/1867228 improves this but does not solve it
    //   completely.
    if ($entity instanceof FieldableEntityInterface) {
      foreach ($entity as $name => $field) {
        if (isset($values[$name])) {
          $entity->{$name} = $values[$name];
        }
        elseif (!array_key_exists($name, $values)) {
          $entity
            ->get($name)
            ->applyDefaultValue();
        }
        unset($values[$name]);
      }
    }
    return $entity;
  }
  /**
   * {@inheritdoc}
   */
  public function doLoadMultiple(array $ids = NULL) {
    if (empty($ids)) {
      $entities = $this->keyValueStore
        ->getAll();
    }
    else {
      $entities = $this->keyValueStore
        ->getMultiple($ids);
    }
    return $this
      ->mapFromStorageRecords($entities);
  }
  /**
   * {@inheritdoc}
   */
  public function loadRevision($revision_id) {
    return NULL;
  }
  /**
   * {@inheritdoc}
   */
  public function deleteRevision($revision_id) {
    return NULL;
  }
  /**
   * {@inheritdoc}
   */
  public function doDelete($entities) {
    $entity_ids = array_keys($entities);
    $this->keyValueStore
      ->deleteMultiple($entity_ids);
  }
  /**
   * {@inheritdoc}
   */
  public function save(EntityInterface $entity) {
    $id = $entity
      ->id();
    if ($id === NULL || $id === '') {
      throw new EntityMalformedException('The entity does not have an ID.');
    }
    // Check the entity ID length.
    // @todo This is not config-specific, but serial IDs will likely never hit
    //   this limit. Consider renaming the exception class.
    if (strlen($entity
      ->id()) > static::MAX_ID_LENGTH) {
      throw new ConfigEntityIdLengthException("Entity ID {$entity->id()} exceeds maximum allowed length of " . static::MAX_ID_LENGTH . ' characters.');
    }
    return parent::save($entity);
  }
  /**
   * {@inheritdoc}
   */
  protected function doSave($id, EntityInterface $entity) {
    $is_new = $entity
      ->isNew();
    // Save the entity data in the key value store.
    $this->keyValueStore
      ->set($entity
      ->id(), $entity
      ->toArray());
    // If this is a rename, delete the original entity.
    if ($this
      ->has($id, $entity) && $id !== $entity
      ->id()) {
      $this->keyValueStore
        ->delete($id);
    }
    return $is_new ? SAVED_NEW : SAVED_UPDATED;
  }
  /**
   * {@inheritdoc}
   */
  protected function has($id, EntityInterface $entity) {
    return $this->keyValueStore
      ->has($id);
  }
  /**
   * {@inheritdoc}
   */
  protected function getQueryServiceName() {
    return 'entity.query.keyvalue';
  }
}Members
| Name   | Modifiers | Type | Description | Overrides | 
|---|---|---|---|---|
| DependencySerializationTrait:: | protected | property | An array of service IDs keyed by property name used for serialization. | |
| DependencySerializationTrait:: | public | function | 1 | |
| DependencySerializationTrait:: | public | function | 2 | |
| EntityHandlerBase:: | protected | property | The module handler to invoke hooks on. | 3 | 
| EntityHandlerBase:: | protected | function | Gets the module handler. | 3 | 
| EntityHandlerBase:: | public | function | Sets the module handler for this handler. | |
| EntityStorageBase:: | protected | property | Static cache of entities, keyed by entity ID. | 1 | 
| EntityStorageBase:: | protected | property | Name of the entity class. | |
| EntityStorageBase:: | protected | property | Information about the entity type. | |
| EntityStorageBase:: | protected | property | Entity type ID for this storage. | |
| EntityStorageBase:: | protected | property | Name of the entity's ID field in the entity database table. | |
| EntityStorageBase:: | protected | property | The name of the entity langcode property. | 1 | 
| EntityStorageBase:: | protected | property | Name of entity's UUID database table field, if it supports UUIDs. | 1 | 
| EntityStorageBase:: | protected | function | Builds an entity query. | 1 | 
| EntityStorageBase:: | public | function | Constructs a new entity object, without permanently saving it. Overrides EntityStorageInterface:: | 1 | 
| EntityStorageBase:: | public | function | Deletes permanently saved entities. Overrides EntityStorageInterface:: | 2 | 
| EntityStorageBase:: | protected | function | Performs post save entity processing. | 1 | 
| EntityStorageBase:: | protected | function | Performs presave entity processing. | 1 | 
| EntityStorageBase:: | public | function | Gets an aggregated query instance. Overrides EntityStorageInterface:: | |
| EntityStorageBase:: | public | function | Gets the entity type definition. Overrides EntityStorageInterface:: | |
| EntityStorageBase:: | public | function | Gets the entity type ID. Overrides EntityStorageInterface:: | |
| EntityStorageBase:: | protected | function | Gets entities from the static cache. | 1 | 
| EntityStorageBase:: | public | function | Gets an entity query instance. Overrides EntityStorageInterface:: | |
| EntityStorageBase:: | protected | function | Invokes a hook on behalf of the entity. | 2 | 
| EntityStorageBase:: | public | function | Loads one entity. Overrides EntityStorageInterface:: | 2 | 
| EntityStorageBase:: | public | function | Load entities by their property values. Overrides EntityStorageInterface:: | 3 | 
| EntityStorageBase:: | public | function | Loads one or more entities. Overrides EntityStorageInterface:: | 2 | 
| EntityStorageBase:: | public | function | Loads an unchanged entity from the database. Overrides EntityStorageInterface:: | |
| EntityStorageBase:: | protected | function | Maps from storage records to entity objects. | 3 | 
| EntityStorageBase:: | protected | function | Attaches data to entities upon loading. | |
| EntityStorageBase:: | public | function | Resets the internal, static entity cache. Overrides EntityStorageInterface:: | 2 | 
| EntityStorageBase:: | protected | function | Stores entities in the static entity cache. | 1 | 
| EntityStorageInterface:: | constant | Load the most recent version of an entity's field data. | ||
| EntityStorageInterface:: | constant | Load the version of an entity's field data specified in the entity. | ||
| KeyValueEntityStorage:: | protected | property | The key value store. | |
| KeyValueEntityStorage:: | protected | property | The language manager. | |
| KeyValueEntityStorage:: | protected | property | The UUID service. Overrides EntityStorageBase:: | |
| KeyValueEntityStorage:: | public static | function | Instantiates a new instance of this entity handler. Overrides EntityHandlerInterface:: | |
| KeyValueEntityStorage:: | public | function | Delete a specific entity revision. Overrides EntityStorageInterface:: | |
| KeyValueEntityStorage:: | public | function | Performs storage-specific creation of entities. Overrides EntityStorageBase:: | |
| KeyValueEntityStorage:: | public | function | Performs storage-specific entity deletion. Overrides EntityStorageBase:: | |
| KeyValueEntityStorage:: | public | function | Performs storage-specific loading of entities. Overrides EntityStorageBase:: | |
| KeyValueEntityStorage:: | protected | function | Performs storage-specific saving of the entity. Overrides EntityStorageBase:: | |
| KeyValueEntityStorage:: | protected | function | Gets the name of the service for the query for this entity storage. Overrides EntityStorageBase:: | |
| KeyValueEntityStorage:: | protected | function | Determines if this entity already exists in storage. Overrides EntityStorageBase:: | |
| KeyValueEntityStorage:: | public | function | Load a specific entity revision. Overrides EntityStorageInterface:: | |
| KeyValueEntityStorage:: | constant | Length limit of the entity ID. | ||
| KeyValueEntityStorage:: | public | function | Saves the entity permanently. Overrides EntityStorageBase:: | |
| KeyValueEntityStorage:: | public | function | Constructs a new KeyValueEntityStorage. Overrides EntityStorageBase:: | |
| StringTranslationTrait:: | protected | property | The string translation service. | |
| StringTranslationTrait:: | protected | function | Formats a string containing a count of items. | |
| StringTranslationTrait:: | protected | function | Returns the number of plurals supported by a given language. | |
| StringTranslationTrait:: | protected | function | Gets the string translation service. | |
| StringTranslationTrait:: | public | function | Sets the string translation service to use. | 2 | 
| StringTranslationTrait:: | protected | function | Translates a string to the current language or to a given language. | 
