/** * Fill model with values from result * @param PerfORM $model * @param array $values * @result PerfORM */ public function fill($values) { if ($values === false) { return; } foreach ($this->getFields() as $field) { $key = $this->getAlias() . '__' . $field->getRealName(); if ($field->getIdent() == PerfORM::ForeignKeyField && !key_exists($field->getReference()->getAlias() . '__' . $field->getReference()->getPrimaryKey(), $values)) { $field->setLazyLoadingKeyValue($values[$key]); $field->enableLazyLoading(); } elseif ($field->getIdent() == PerfORM::ForeignKeyField && !$field->isEnabledLazyLoading()) { $child = clone $field->getReference(); $child->fill($values); $field->setValue($child); } elseif ($field->getIdent() == PerfORM::ForeignKeyField && $field->isEnabledLazyLoading()) { $field->setLazyLoadingKeyValue($values[$key]); } elseif (key_exists($key, $values)) { $this->__set($field->getName(), $values[$key]); } else { Debug::barDump($this); throw new Exception("The is no value in result for field '{$key}'"); } } $this->setUnmodified(); if ($this->isExtended()) { $this->extends->fill($values); } }