private function cascadeMerge($document, $managedCopy, array &$visited)
{
$class = $this->dm->getClassMetadata(get_class($document));
foreach ($class->associationsMappings as $assoc) {
if ($assoc['cascade'] & ClassMetadata::CASCADE_MERGE == 0) {
continue;
}
$relatedDocuments = $class->reflFields[$assoc['fieldName']]->getValue($document);
if ($relatedDocuments instanceof Collection) {
if ($relatedDocuments instanceof PersistentCollection) {
// Unwrap so that foreach() does not initialize
$relatedDocuments = $relatedDocuments->unwrap();
}
foreach ($relatedDocuments as $relatedDocument) {
$this->doMerge($relatedDocument, $visited, $managedCopy, $assoc);
}
} else {
if ($relatedDocuments !== null) {
$this->doMerge($relatedDocuments, $visited, $managedCopy, $assoc);
}
}
}
}