Doctrine\ODM\MongoDB\UnitOfWork::doRemove PHP Method

doRemove() private method

This method is internally called during delete() cascades as it tracks the already visited documents to prevent infinite recursions.
private doRemove ( object $document, array &$visited )
$document object The document to delete.
$visited array The map of the already visited documents.
    private function doRemove($document, array &$visited)
    {
        $oid = spl_object_hash($document);
        if (isset($visited[$oid])) {
            return;
            // Prevent infinite recursion
        }
        $visited[$oid] = $document;
        // mark visited
        /* Cascade first, because scheduleForDelete() removes the entity from
         * the identity map, which can cause problems when a lazy Proxy has to
         * be initialized for the cascade operation.
         */
        $this->cascadeRemove($document, $visited);
        $class = $this->dm->getClassMetadata(get_class($document));
        $documentState = $this->getDocumentState($document);
        switch ($documentState) {
            case self::STATE_NEW:
            case self::STATE_REMOVED:
                // nothing to do
                break;
            case self::STATE_MANAGED:
                $this->lifecycleEventManager->preRemove($class, $document);
                $this->scheduleForDelete($document);
                break;
            case self::STATE_DETACHED:
                throw MongoDBException::detachedDocumentCannotBeRemoved();
            default:
                throw MongoDBException::invalidDocumentState($documentState);
        }
    }
UnitOfWork