/** * 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; }
public function updateById($id, $data, $options = null, $return_object = false) { if ($cache = wa()->getCache()) { $cache->delete('block_' . $id); } return parent::updateById($id, $data, $options, $return_object); }
/** * 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; }
public function updateById($id, $data, $options = null, $return_object = false) { if ($cache = wa('shop')->getCache()) { $cache->deleteGroup('sets'); } return parent::updateById($id, $data, $options, $return_object); }