public function save() { $elements = $this->getElements(); $model = AbstractModel::get($this->getName()); $primary = $model->primary(); $metadata = $model->getTable()->info('metadata'); $edit = false; $values = array(); foreach ($elements as $element) { $id = $element->getName(); $value = method_exists($element, 'getDbValue') ? $element->getDbValue() : $element->getValue(); if (in_array($id, $primary) && $value) { $edit = $value; } else { if ($value) { $values[$id] = $value; } elseif (isset($metadata[$id])) { $values[$id] = $metadata[$id]['DEFAULT']; } } } if ($edit) { $model = $model->getTable()->findOneById($edit); } try { $model->setFromArray($values); return $model->save(); } catch (Exception $e) { die($e->getMessage()); } }