/** * Update record * @param IRecord record */ public function update(IRecord $record) { try { $record->onBeforeUpdate($record); $config = $this->getConfig(); $columns = array_intersect($config->getColumns(), $record->getModified()); foreach ($columns as $column) { $values[$column . "%" . $config->getType($column)] = $record->{$column}; } if (isset($values)) { $this->getDb()->update($this->table, $values)->where($record->getValues($config->getPrimaryColumns()))->execute(); $record->clearModified(); } foreach ($this->associations as $name => $association) { if ($record->isAssociationLoaded($name)) { $association->saveReferenced($record, $record->{$name}); } } $record->onAfterUpdate($record); } catch (\Exception $e) { throw new \ModelException("Update failed. " . $e->getMessage(), $e->getCode(), $e); } }