/** * Inser record into database * @param IRecord record */ public function insert(IRecord $record) { try { $record->onBeforeInsert($record); $values = array(); $config = $this->getConfig(); foreach ($config->getColumns() as $column) { if ($record->hasValue($column)) { $values[$column . "%" . $config->getType($column)] = $record->{$column}; } } // do query $this->getDb()->insert($this->table, $values)->execute(); // fill auto increment primary key if ($config->isPrimaryAutoIncrement()) { $record[$config->getPrimaryColumn()] = $this->getDb()->getInsertId(); } // set state $record->setState(IRecord::STATE_EXISTING); $record->clearModified(); foreach ($this->associations as $name => $association) { if ($record->isAssociationLoaded($name)) { $association->saveReferenced($record, $record->{$name}); } } $record->onAfterInsert($record); } catch (\Exception $e) { throw new \ModelException("Insert failed. " . $e->getMessage(), $e->getCode(), $e); } }