private function cascadeMerge(ClassMetadata $class, $document, $managedCopy, array &$visited)
{
foreach (array_merge($class->referenceMappings, $class->referrersMappings) as $fieldName) {
$mapping = $class->mappings[$fieldName];
if (!($mapping['cascade'] & ClassMetadata::CASCADE_MERGE)) {
continue;
}
$related = $class->reflFields[$fieldName]->getValue($document);
if ($related instanceof Collection || is_array($related)) {
if ($related instanceof PersistentCollection) {
// Unwrap so that foreach () does not initialize
$related = $related->unwrap();
}
foreach ($related as $relatedDocument) {
$this->doMerge($relatedDocument, $visited, $managedCopy, $mapping);
}
} elseif ($related !== null) {
$this->doMerge($related, $visited, $managedCopy, $mapping);
}
}
}