/** * Returns the reference representation to be stored in mongodb or null if not applicable. * * @param ClassMetadata $class * @param Document $doc * @return array|null */ private function _prepareDocReference(ClassMetadata $class, $doc) { if (!is_object($doc)) { return $doc; } $id = $this->_uow->getDocumentIdentifier($doc); $ref = array('$ref' => $class->getCollection(), '$id' => $id, '$db' => $class->getDB()); return $ref; }
/** * Returns a DBRef array for the supplied document. * * @param mixed $document A document object * @param array $referenceMapping Mapping for the field the references the document * * @return array A DBRef array */ public function createDBRef($document, array $referenceMapping = null) { $class = $this->getClassMetadata(get_class($document)); $id = $this->unitOfWork->getDocumentIdentifier($document); $dbRef = array($this->cmd . 'ref' => $class->getCollection(), $this->cmd . 'id' => $class->getDatabaseIdentifierValue($id), $this->cmd . 'db' => $class->getDatabase()); // add a discriminator value if the referenced document is not mapped explicitely to a targetDocument if ($referenceMapping && !isset($referenceMapping['targetDocument'])) { $discriminatorField = isset($referenceMapping['discriminatorField']) ? $referenceMapping['discriminatorField'] : '_doctrine_class_name'; $discriminatorValue = isset($referenceMapping['discriminatorMap']) ? array_search($class->getName(), $referenceMapping['discriminatorMap']) : $class->getName(); $dbRef[$discriminatorField] = $discriminatorValue; } return $dbRef; }
/** * Returns a DBRef array for the supplied document. * * @param mixed $document A document object * @param array $referenceMapping Mapping for the field the references the document * * @return array A DBRef array */ public function createDBRef($document, array $referenceMapping = null) { if (!is_object($document)) { throw new \InvalidArgumentException('Cannot create a DBRef, the document is not an object'); } $className = get_class($document); $class = $this->getClassMetadata($className); $id = $this->unitOfWork->getDocumentIdentifier($document); $dbRef = array($this->cmd . 'ref' => $class->getCollection(), $this->cmd . 'id' => $class->getDatabaseIdentifierValue($id), $this->cmd . 'db' => $this->getDocumentDatabase($className)->getName()); if ($class->discriminatorField) { $dbRef[$class->discriminatorField['name']] = $class->discriminatorValue; } // add a discriminator value if the referenced document is not mapped explicitely to a targetDocument if ($referenceMapping && !isset($referenceMapping['targetDocument'])) { $discriminatorField = isset($referenceMapping['discriminatorField']) ? $referenceMapping['discriminatorField'] : '_doctrine_class_name'; $discriminatorValue = isset($referenceMapping['discriminatorMap']) ? array_search($class->getName(), $referenceMapping['discriminatorMap']) : $class->getName(); $dbRef[$discriminatorField] = $discriminatorValue; } return $dbRef; }