Esempio n. 1
0
 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;
 }