/** * Save changed meta data * @param \Rocker\Object\MetaInterface $obj * @throws \Exception * @return bool Whether or not any meta data had changed */ function saveMetaData(MetaInterface $obj) { $meta = $obj->meta(); $id = $obj->getId(); $changed = false; // Update / insert of values foreach ($meta->getUpdatedValues() as $name => $val) { $changed = true; $value = is_string($val) || is_int($val) ? trim($val) : serialize($val); try { $this->db->prepare("INSERT INTO " . $this->dbTable . " (`value`, `object`, `name`) VALUES (?, ?, ?)")->execute(array($value, $id, $name)); } catch (\Exception $e) { if ($e->getCode() == 23000) { $this->db->prepare("UPDATE " . $this->dbTable . " SET `value`=? WHERE `object`=? AND `name`=?")->execute(array($value, $id, $name)); } else { throw $e; } } } // Deleted values foreach ($meta->getDeletedValues() as $name) { $changed = true; $this->db->prepare("DELETE FROM " . $this->dbTable . " WHERE `object`=? AND `name`=?")->execute(array($id, $name)); } // Clear the meta object of data that needs to be updated and remove cached data if ($changed) { $meta->setDeletedValues(array()); $meta->setUpdatedValues(array()); $this->cache->delete($this->cachePrefix . $obj->getId()); } return $changed; }
/** * @param ObjectInterface $obj */ protected function deleteObjectCache(ObjectInterface $obj) { $this->cache->delete($this->cachePrefix . $obj->getId()); $this->cache->delete($this->cachePrefix . 'name_' . $obj->getName()); }