protected function hydrateEntity($data)
{
$entity = clone $this->provider->getEntity();
// hydrate to array object
if (method_exists($entity, 'populate') || method_exists($entity, 'exchangeArray')) {
$hydrator = $this->getArraySerizableHydrator();
$entity = $hydrator->hydrate($data, $entity);
//add relations
$data = $this->addRelationsToData($data, $entity);
$entity = $hydrator->hydrate($data, $entity);
}
$data = $this->camelizeKeys($data);
$classMethodHydrator = $this->getClassMethodsHydrator();
$propertyHydrator = $this->getObjectPropertyHydrator();
// hydrate entity data
$entity = $classMethodHydrator->hydrate($data, $propertyHydrator->hydrate($data, $entity));
//add relations
$data = $this->addRelationsToData($data, $entity);
// hydrate entity with relation data to add hydrated entity to relation
return $classMethodHydrator->hydrate($data, $propertyHydrator->hydrate($data, $entity));
}