/** * Initializes (loads) an uninitialized persistent collection of a document. * * @param PersistentCollectionInterface $collection The collection to initialize. */ public function loadCollection(PersistentCollectionInterface $collection) { $this->getDocumentPersister(get_class($collection->getOwner()))->loadCollection($collection); $this->lifecycleEventManager->postCollectionLoad($collection); }
/** * Deletes a document as part of the current unit of work. * * This method is internally called during delete() cascades as it tracks * the already visited documents to prevent infinite recursions. * * @param object $document The document to delete. * @param array $visited The map of the already visited documents. * @throws MongoDBException */ 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); } }