/**
  * Save this record to database: insert or update depending on whether record exists in DB.
  * Silently ignores all keys that have no corresponding fields in database table.
  *
  * @return mixed this record id
  * @throws waException when values fail validation
  */
 public function save()
 {
     $this->beforeSave();
     $values = array_intersect_key($this->removeStubs()->rec_data, $this->m->getMetadata());
     if ($this->id === null) {
         $this->id = $this->m->insert($values);
         $this[$this->m->getTableId()] = $this->id;
     } else {
         $this->m->updateById($this->id, $values);
     }
     $this->afterSave();
     $this->merge();
     return $this->id;
 }
Example #2
0
 /**
  * Save this record to database: insert or update depending on whether record exists in DB.
  * Silently ignores all keys that have no corresponding fields in database table.
  *
  * @return mixed this record id
  * @throws waException when values fail validation
  */
 public function save()
 {
     $this->beforeSave();
     $values = array_intersect_key($this->removeStubs()->rec_data, $this->m->getMetadata());
     $do_insert = true;
     $id = $this->getId();
     // Force saving with given id, if specified during construction
     $id || ($id = $this->persistent->ifset($this->m->getTableId()));
     // Update if record exists
     if ($id && $this->exists()) {
         if (!$values) {
             $do_insert = false;
         } else {
             $result = $this->m->updateById($this->id, $values, null, true);
             if ($result->affectedRows()) {
                 $do_insert = false;
                 if (!empty($values[$this->m->getTableId()])) {
                     $this->id = $values[$this->m->getTableId()];
                 }
             } else {
                 // Make sure the record exists
                 if ($row = $this->m->getById($this->id)) {
                     $do_insert = false;
                     $this->persistent->setAll($row);
                 } else {
                     $this->clearPersistent();
                 }
             }
         }
     } else {
         if ($id && empty($values[$this->m->getTableId()])) {
             // id was given to constructor, but no such record exists
             $values[$this->m->getTableId()] = $id;
         }
     }
     // No row in database yet: insert
     if ($do_insert) {
         unset($this->persistent[$this->m->getTableId()]);
         $this->id = $this->m->insert($values);
         $this[$this->m->getTableId()] = $this->id;
     }
     $this->afterSave();
     $this->merge();
     return $this->id;
 }