. */ namespace Doctrine\ORM\Cache\Region; use Doctrine\Common\Cache\MultiGetCache; use Doctrine\ORM\Cache\Region; use Doctrine\ORM\Cache\CollectionCacheEntry; /** * A cache region that enables the retrieval of multiple elements with one call * * @since 2.5 * @author Asmir Mustafic */ class DefaultMultiGetRegion extends DefaultRegion { /** * Note that the multiple type is due to doctrine/cache not integrating the MultiGetCache interface * in its signature due to BC in 1.x * * @var MultiGetCache|\Doctrine\Common\Cache\Cache */ protected $cache; /** * {@inheritDoc} * * @param MultiGetCache $cache */ public function __construct($name, MultiGetCache $cache, $lifetime = 0) { /* @var $cache \Doctrine\Common\Cache\Cache */ parent::__construct($name, $cache, $lifetime); } /** * {@inheritdoc} */ public function getMultiple(CollectionCacheEntry $collection) { $keysToRetrieve = array(); foreach ($collection->identifiers as $index => $key) { $keysToRetrieve[$index] = $this->name . '_' . $key->hash; } $items = $this->cache->fetchMultiple($keysToRetrieve); if (count($items) !== count($keysToRetrieve)) { return null; } $returnableItems = array(); foreach ($keysToRetrieve as $index => $key) { $returnableItems[$index] = $items[$key]; } return $returnableItems; } }