/** * Finds a document by its identifier * * @throws LockException * @param string|object $id The identifier * @param int $lockMode * @param int $lockVersion * @return object The document. */ public function find($id, $lockMode = LockMode::NONE, $lockVersion = null) { if ($id === null) { return; } if (is_array($id)) { list($identifierFieldName) = $this->class->getIdentifierFieldNames(); if (!isset($id[$identifierFieldName])) { throw MappingException::missingIdentifierField($this->documentName, $identifierFieldName); } $id = $id[$identifierFieldName]; } // Check identity map first if ($document = $this->uow->tryGetById($id, $this->class->rootDocumentName)) { if ($lockMode != LockMode::NONE) { $this->dm->lock($document, $lockMode, $lockVersion); } return $document; // Hit! } if ($lockMode == LockMode::NONE) { return $this->uow->getDocumentPersister($this->documentName)->load($id); } else { if ($lockMode == LockMode::OPTIMISTIC) { if (!$this->class->isVersioned) { throw LockException::notVersioned($this->documentName); } $document = $this->uow->getDocumentPersister($this->documentName)->load($id); $this->uow->lock($document, $lockMode, $lockVersion); return $document; } else { return $this->uow->getDocumentPersister($this->documentName)->load($id, null, array(), $lockMode); } } }
/** * Finds a document by its identifier * * @param string|object $id The identifier * @param int $lockMode * @param int $lockVersion * @throws Mapping\MappingException * @throws LockException * @return object The document. */ public function find($id, $lockMode = LockMode::NONE, $lockVersion = null) { if ($id === null) { return; } /* TODO: What if the ID object has a field with the same name as the * class' mapped identifier field name? */ if (is_array($id)) { list($identifierFieldName) = $this->class->getIdentifierFieldNames(); if (isset($id[$identifierFieldName])) { $id = $id[$identifierFieldName]; } } // Check identity map first if ($document = $this->uow->tryGetById($id, $this->class)) { if ($lockMode != LockMode::NONE) { $this->dm->lock($document, $lockMode, $lockVersion); } return $document; // Hit! } $criteria = array('_id' => $id); if ($lockMode == LockMode::NONE) { return $this->getDocumentPersister()->load($criteria); } if ($lockMode == LockMode::OPTIMISTIC) { if (!$this->class->isVersioned) { throw LockException::notVersioned($this->documentName); } if ($document = $this->getDocumentPersister()->load($criteria)) { $this->uow->lock($document, $lockMode, $lockVersion); } return $document; } return $this->getDocumentPersister()->load($criteria, null, array(), $lockMode); }
/** * {@inheritdoc} */ public function getIdentifierFieldNames() { return $this->classMetadata->getIdentifierFieldNames(); }