/**
* Deserialise the entity
*
* @param Entity $metadata Metadata object to match the entity
* @param SerialisedData $data Data to deserialise
* @param object $entity Entity to hydrate
*/
public function deserialise(Entity $metadata, SerialisedData $data, $entity)
{
// Using $assoc = true is ~ 10-20% quicker on PHP 5.3
// Source: http://stackoverflow.com/questions/8498114/should-i-use-an-associative-array-or-an-object
$raw = json_decode($data->getData(), true, self::ENCODE_DEPTH);
foreach ($metadata->getColumns() as $column) {
$setter = $column->getSetter();
$field = $column->getName();
$value = isset($raw[$field]) ? $raw[$field] : null;
switch ($column->getType()) {
default:
break;
case FieldType::DATETIME():
$entity->{$setter}($this->deserialiseDateTime($value));
break;
case FieldType::INT():
$entity->{$setter}((int) $value);
break;
case FieldType::STRING():
$entity->{$setter}((string) $value);
break;
case FieldType::DECIMAL():
$entity->{$setter}((double) $value);
break;
case FieldType::BOOL():
$entity->{$setter}((bool) $value);
break;
case FieldType::SET():
$entity->{$setter}(json_decode($value, true));
break;
case FieldType::OBJECT():
$entity->{$setter}($this->deserialiseObject($value, $column->getClassName()));
break;
}
}
}