public static function createEntity(AbstractEntity $entity, array $data, array $requiredData = null)
{
if (!empty($data)) {
$it = $entity->getIterator();
foreach ($data as $prop => $value) {
if ($it->getField($prop)) {
$entity->{$prop} = $value;
} else {
throw new InvalidArgumentException(sprintf("Field %s does not exist in %s entity.", $prop, get_class($entity)));
}
}
}
$initProperties = [];
if (!empty($requiredData)) {
foreach ($requiredData as $prop) {
if (isset($data[$prop])) {
$initProperties[$prop] = $data[$prop];
} else {
throw new InvalidArgumentException(sprintf("Field %s does not exist in data.", $prop));
}
}
}
$entity->save();
$key = [];
foreach ($entity->getIterator()->getPrimaryKey() as $position => $property) {
$key[$position] = $entity->{$property};
}
static::toDelete(get_class($entity), $key, $initProperties);
return $entity;
}