cache = $cache; $this->metadataModel = $metadataModel; $this->cachePrefix = $cachePrefix; $this->entityId = $entityId; } /** * Get metadata value by key * * @param string $key * @param mixed $default * @return mixed */ public function get($key, $default) { $metadata = $this->cache->get($this->getCacheKey()); if ($metadata === null) { $metadata = $this->metadataModel->getAll($this->entityId); $this->cache->set($this->getCacheKey(), $metadata); } return isset($metadata[$key]) ? $metadata[$key] : $default; } /** * Set new metadata value * * @param $key * @param $value */ public function set($key, $value) { $this->metadataModel->save($this->entityId, array( $key => $value, )); $metadata = $this->metadataModel->getAll($this->entityId); $this->cache->set($this->getCacheKey(), $metadata); } /** * Get cache key * * @return string */ protected function getCacheKey() { return $this->cachePrefix.$this->entityId; } }