You are here

public function BackendChain::getMultiple in Drupal 10

Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/Cache/BackendChain.php \Drupal\Core\Cache\BackendChain::getMultiple()
  2. 9 core/lib/Drupal/Core/Cache/BackendChain.php \Drupal\Core\Cache\BackendChain::getMultiple()

File

core/lib/Drupal/Core/Cache/BackendChain.php, line 85

Class

BackendChain
Defines a chained cache implementation for combining multiple cache backends.

Namespace

Drupal\Core\Cache

Code

public function getMultiple(&$cids, $allow_invalid = FALSE) {
  $return = [];
  foreach ($this->backends as $index => $backend) {
    $items = $backend
      ->getMultiple($cids, $allow_invalid);

    // Propagate the values that could be retrieved from the current cache
    // backend to all missed backends.
    if ($index > 0 && !empty($items)) {
      for ($i = $index - 1; 0 <= $i; --$i) {
        foreach ($items as $cached) {
          $this->backends[$i]
            ->set($cached->cid, $cached->data, $cached->expire, $cached->tags);
        }
      }
    }

    // Append the values to the previously retrieved ones.
    $return += $items;
    if (empty($cids)) {

      // No need to go further if we don't have any cid to fetch left.
      break;
    }
  }
  return $return;
}