setCacheMetadata($cacheKey); } /** * {@inheritDoc} * */ public function describe($name, array $options = []) { $options += ['forceRefresh' => false]; $cacheConfig = $this->getCacheMetadata(); $cacheKey = $this->cacheKey($name); if (!empty($cacheConfig) && !$options['forceRefresh']) { $cached = Cache::read($cacheKey, $cacheConfig); if ($cached !== false) { return $cached; } } $table = parent::describe($name, $options); if (!empty($cacheConfig)) { Cache::write($cacheKey, $table, $cacheConfig); } return $table; } /** * Get the cache key for a given name. * * @param string $name The name to get a cache key for. * @return string The cache key. */ public function cacheKey($name) { return $this->_connection->configName() . '_' . $name; } /** * Sets the cache config name to use for caching table metadata, or * disables it if false is passed. * * @param bool $enable Whether or not to enable caching * @return $this */ public function setCacheMetadata($enable) { if ($enable === true) { $enable = '_cake_model_'; } $this->_cache = $enable; return $this; } /** * Gets the cache config name to use for caching table metadata, false means disabled. * * @return string|bool */ public function getCacheMetadata() { return $this->_cache; } /** * Sets the cache config name to use for caching table metadata, or * disables it if false is passed. * If called with no arguments it returns the current configuration name. * * @deprecated 3.4.0 Use setCacheMetadata()/getCacheMetadata() * @param bool|null $enable Whether or not to enable caching * @return string|bool */ public function cacheMetadata($enable = null) { deprecationWarning( 'CachedCollection::cacheMetadata() is deprecated. ' . 'Use CachedCollection::setCacheMetadata()/getCacheMetadata() instead.' ); if ($enable !== null) { $this->setCacheMetadata($enable); } return $this->getCacheMetadata(); } }