public function save() { // Force validations to run if ($this->validationPassed === false) { $validated = $this->validate(); if ($validated !== true) { throw new ModelException("Failed to validate the model [{$this->package}] " . json_encode($validated), $validated); } } $this->datastore->beginTransaction(); $this->preAddHook(); $this->datastore->setData($this->datastore->data, $this->fields); $id = $this->saveImplementation(); $this->postAddHook($id, $this->getData()); SystemAuditTrailModel::logAdd($this, $id); $this->datastore->endTransaction(); $this->postCommitHook($id, $this->getData()); return $id; }