private function hydrateQueryRecord(QueryResultMapper $resultMapper, Record $record)
{
$reflClass = new \ReflectionClass($resultMapper->getClassName());
$instance = $reflClass->newInstanceWithoutConstructor();
foreach ($resultMapper->getFields() as $field) {
if (!$record->hasValue($field->getFieldName())) {
throw new \RuntimeException(sprintf('The record doesn\'t contain the required field "%s"', $field->getFieldName()));
}
$value = null;
if ($field->isEntity()) {
$value = $this->hydrate($record, false, $field->getFieldName(), ClassUtils::getFullClassName($field->getTarget(), $resultMapper->getClassName()));
} else {
$value = $record->get($field->getFieldName());
}
$property = $reflClass->getProperty($field->getFieldName());
$property->setAccessible(true);
$property->setValue($instance, $value);
}
return $instance;
}