예제 #1
0
 /**
  * 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());
 }