function EntityStorageBase::loadMultiple

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

Overrides EntityStorageInterface::loadMultiple

12 calls to EntityStorageBase::loadMultiple()
CommentStorage::loadThread in core/modules/comment/src/CommentStorage.php
To display threaded comments in the correct order we keep a 'thread' field and order by that value. This field keeps this data in a way which is easy to update and convenient to use.
ConfigEntityStorage::loadMultipleOverrideFree in core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php
Loads one or more entities in their original form without overrides.
EntityStorageBase::load in core/lib/Drupal/Core/Entity/EntityStorageBase.php
Loads one entity.
EntityStorageBase::loadByProperties in core/lib/Drupal/Core/Entity/EntityStorageBase.php
Load entities by their property values.
FieldConfigStorage::loadByProperties in core/modules/field/src/FieldConfigStorage.php
Load entities by their property values.

... See full list

1 method overrides EntityStorageBase::loadMultiple()
ContentEntityNullStorage::loadMultiple in core/lib/Drupal/Core/Entity/ContentEntityNullStorage.php
Loads one or more entities.

File

core/lib/Drupal/Core/Entity/EntityStorageBase.php, line 257

Class

EntityStorageBase
A base entity storage class.

Namespace

Drupal\Core\Entity

Code

public function loadMultiple(array $ids = NULL) {
    $entities = [];
    $preloaded_entities = [];
    // Create a new variable which is either a prepared version of the $ids
    // array for later comparison with the entity cache, or FALSE if no $ids
    // were passed. The $ids array is reduced as items are loaded from cache,
    // and we need to know if it is empty for this reason to avoid querying the
    // database when all requested entities are loaded from cache.
    $flipped_ids = $ids ? array_flip($ids) : FALSE;
    // Try to load entities from the static cache, if the entity type supports
    // static caching.
    if ($ids) {
        $entities += $this->getFromStaticCache($ids);
        // If any entities were loaded, remove them from the IDs still to load.
        $ids = array_keys(array_diff_key($flipped_ids, $entities));
    }
    // Try to gather any remaining entities from a 'preload' method. This method
    // can invoke a hook to be used by modules that need, for example, to swap
    // the default revision of an entity with a different one. Even though the
    // base entity storage class does not actually invoke any preload hooks, we
    // need to call the method here so we can add the pre-loaded entity objects
    // to the static cache below. If all the entities were fetched from the
    // static cache, skip this step.
    if ($ids === NULL || $ids) {
        $preloaded_entities = $this->preLoad($ids);
    }
    if (!empty($preloaded_entities)) {
        $entities += $preloaded_entities;
        // If any entities were pre-loaded, remove them from the IDs still to
        // load.
        $ids = array_keys(array_diff_key($flipped_ids, $entities));
        // Add pre-loaded entities to the cache.
        $this->setStaticCache($preloaded_entities);
    }
    // Load any remaining entities from the database. This is the case if $ids
    // is set to NULL (so we load all entities) or if there are any IDs left to
    // load.
    if ($ids === NULL || $ids) {
        $queried_entities = $this->doLoadMultiple($ids);
    }
    // Pass all entities loaded from the database through $this->postLoad(),
    // which attaches fields (if supported by the entity type) and calls the
    // entity type specific load callback, for example hook_node_load().
    if (!empty($queried_entities)) {
        $this->postLoad($queried_entities);
        $entities += $queried_entities;
        // Add queried entities to the cache.
        $this->setStaticCache($queried_entities);
    }
    // Ensure that the returned array is ordered the same as the original
    // $ids array if this was passed in and remove any invalid IDs.
    if ($flipped_ids) {
        // Remove any invalid IDs from the array and preserve the order passed in.
        $flipped_ids = array_intersect_key($flipped_ids, $entities);
        $entities = array_replace($flipped_ids, $entities);
    }
    return $entities;
}

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