private function cascadeRefresh($document, array &$visited)
{
$class = $this->dm->getClassMetadata(get_class($document));
$associationMappings = array_filter($class->associationMappings, function ($assoc) {
return $assoc['isCascadeRefresh'];
});
foreach ($associationMappings as $mapping) {
$relatedDocuments = $class->reflFields[$mapping['fieldName']]->getValue($document);
if ($relatedDocuments instanceof Collection || is_array($relatedDocuments)) {
if ($relatedDocuments instanceof PersistentCollectionInterface) {
// Unwrap so that foreach() does not initialize
$relatedDocuments = $relatedDocuments->unwrap();
}
foreach ($relatedDocuments as $relatedDocument) {
$this->doRefresh($relatedDocument, $visited);
}
} elseif ($relatedDocuments !== null) {
$this->doRefresh($relatedDocuments, $visited);
}
}
}