private function cascadeRemove($document, &$visited)
{
$class = $this->dm->getClassMetadata(get_class($document));
foreach ($class->associationsMappings as $name => $assoc) {
if ($assoc['cascade'] & ClassMetadata::CASCADE_REMOVE) {
$related = $class->reflFields[$assoc['fieldName']]->getValue($document);
if ($related instanceof Collection || is_array($related)) {
// If its a PersistentCollection initialization is intended! No unwrap!
foreach ($related as $relatedDocument) {
$this->doRemove($relatedDocument, $visited);
}
} else {
if ($related !== null) {
$this->doRemove($related, $visited);
}
}
}
}
}