private function cascadeRemove($document, array &$visited)
{
$class = $this->dm->getClassMetadata(get_class($document));
foreach ($class->fieldMappings as $mapping) {
if (!$mapping['isCascadeRemove']) {
continue;
}
if ($document instanceof Proxy && !$document->__isInitialized__) {
$document->__load();
}
$relatedDocuments = $class->reflFields[$mapping['fieldName']]->getValue($document);
if ($relatedDocuments instanceof Collection || is_array($relatedDocuments)) {
// If its a PersistentCollection initialization is intended! No unwrap!
foreach ($relatedDocuments as $relatedDocument) {
$this->doRemove($relatedDocument, $visited);
}
} elseif ($relatedDocuments !== null) {
$this->doRemove($relatedDocuments, $visited);
}
}
}