You are here

public function EntityStorageBase::loadMultiple in Drupal 8

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

Loads one or more entities.

Parameters

$ids: An array of entity IDs, or NULL to load all entities.

Return value

\Drupal\Core\Entity\EntityInterface[] An array of entity objects indexed by their IDs. Returns an empty array if no matching entities are found.

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;
}