function ContentEntityStorageBase::loadUnchanged

Same name and namespace in other branches
  1. 9 core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php \Drupal\Core\Entity\ContentEntityStorageBase::loadUnchanged()
  2. 8.9.x core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php \Drupal\Core\Entity\ContentEntityStorageBase::loadUnchanged()
  3. 10 core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php \Drupal\Core\Entity\ContentEntityStorageBase::loadUnchanged()

Overrides EntityStorageBase::loadUnchanged

File

core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php, line 1135

Class

ContentEntityStorageBase
Base class for content entity storage handlers.

Namespace

Drupal\Core\Entity

Code

public function loadUnchanged($id) {
    $entities = [];
    $ids = [
        $id,
    ];
    // The cache invalidation in the parent has the side effect that loading the
    // same entity again during the save process (for example in
    // hook_entity_presave()) will load the unchanged entity. Simulate this
    // by explicitly removing the entity from the static cache.
    parent::resetCache($ids);
    // Gather entities from a 'preload' hook. This hook can be used by modules
    // that need, for example, to return a different revision than the default
    // one for revisionable entity types.
    $preloaded_entities = $this->preLoad($ids);
    if (!empty($preloaded_entities)) {
        $entities += $preloaded_entities;
    }
    // The default implementation in the parent class unsets the current cache
    // and then reloads the entity. That is slow, especially if this is done
    // repeatedly in the same request, e.g. when validating and then saving
    // an entity. Optimize this for content entities by trying to load them
    // directly from the persistent cache again, as in contrast to the static
    // cache the persistent one will never be changed until the entity is saved.
    $entities += $this->getFromPersistentCache($ids);
    if (!$entities) {
        $entities[$id] = $this->load($id);
    }
    else {
        // As the entities are put into the persistent cache before the post load
        // has been executed we have to execute it if we have retrieved the
        // entity directly from the persistent cache.
        $this->postLoad($entities);
        // As we've removed the entity from the static cache already we have to
        // put the loaded unchanged entity there to simulate the behavior of the
        // parent.
        $this->setStaticCache($entities);
    }
    return $entities[$id];
}

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