private function traversePersistIndices(array $indices, $entity, Reader $reader, $local_id)
{
$is_proxy = $entity instanceof OrmProxyInterface;
foreach ($indices as $index) {
$index_value = $reader->getIndexValue($index);
if ($is_proxy) {
/** @var OrmProxyInterface $entity */
$new_id = $local_id != $entity->getOriginalId();
$original_value = $entity->getIndexOriginalValue($index->getName());
if ($original_value == $index_value) {
// Don't skip if ID has changed, but no need to delete any keys
if (!$new_id && !$this->entity_manager->getMaintenanceMode()) {
// Persisted value is indifferent, nothing to do
continue;
}
} else {
// Former index is redundant, remove it
$this->getDriver()->clearSingleValueIndex($this->getKeyScheme()->getIndexKey($index, $original_value));
}
}
$key = $this->getKeyScheme()->getIndexKey($index, $index_value);
$value = $local_id;
$this->getDriver()->setSingleValueIndex($key, $value);
}
}