/** * Provides an mapper for entity * * @param IMapper $mapper * @throws InvalidMethodCallException * @throws InvalidStateException */ private function useMapper(IMapper $mapper) { if ($this->mapper === null) { $newProperties = $this->getReflection($mapper)->getEntityProperties(); foreach ($this->getCurrentReflection()->getEntityProperties() as $oldProperty) { $oldColumn = $oldProperty->getColumn(); if ($oldColumn !== null) { $name = $oldProperty->getName(); if (!isset($newProperties[$name]) or $newProperties[$name]->getColumn() === null) { throw new InvalidStateException('Inconsistent sets of properties detected in entity ' . get_called_class() . '.'); } if ($this->row->hasColumn($oldColumn)) { $newColumn = $newProperties[$name]->getColumn(); $value = $this->row->{$oldColumn}; unset($this->row->{$oldColumn}); $this->row->{$newColumn} = $value; } } } $this->mapper = $mapper; $this->row->setMapper($mapper); $this->currentReflection = null; } elseif ($this->mapper != $mapper) { // intentionally !=, we want to ensure that types and states are same throw new InvalidStateException("Given mapper isn't same as mapper already present in entity " . get_called_class() . '.'); } }