public function save(EntityInterface $entity) { $this->trigger('beforesave', compact('entity')); $data = $originalData = $entity->toArray(); try { $this->beginTransaction(); $data = array_merge($data, $this->saveToTable($this->table, $data)); foreach ($this->table->getDependentTables() as $dependentTable) { $dependentTableInstance = $this->table->getDependentTableInstance($dependentTable); $reference = $dependentTableInstance->getReference(get_class($this->table)); foreach ($data as $k => $v) { $refColumnKey = array_search($k, $reference['refColumns']); if ($refColumnKey !== \false) { $data[$reference['columns'][$refColumnKey]] = $v; } } $data = array_merge($data, $this->saveToTable($dependentTableInstance, $data)); } $entity->setFromArray($data); $this->trigger('aftersave', compact('entity')); $this->commit(); } catch (\Exception $e) { $this->rollBack(); $entity->setFromArray($originalData); throw $e; } $this->removeCache(); return $entity; }