本文整理汇总了PHP中Doctrine\ODM\MongoDB\UnitOfWork::setOriginalDocumentData方法的典型用法代码示例。如果您正苦于以下问题:PHP UnitOfWork::setOriginalDocumentData方法的具体用法?PHP UnitOfWork::setOriginalDocumentData怎么用?PHP UnitOfWork::setOriginalDocumentData使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Doctrine\ODM\MongoDB\UnitOfWork
的用法示例。
在下文中一共展示了UnitOfWork::setOriginalDocumentData方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: loadReferenceManyCollection
private function loadReferenceManyCollection(PersistentCollection $collection)
{
$mapping = $collection->getMapping();
$cmd = $this->cmd;
$groupedIds = array();
foreach ($collection->getMongoData() as $reference) {
$className = $this->dm->getClassNameFromDiscriminatorValue($mapping, $reference);
$mongoId = $reference[$cmd . 'id'];
$id = (string) $mongoId;
$reference = $this->dm->getReference($className, $id);
$collection->add($reference);
if ($reference instanceof Proxy && !$reference->__isInitialized__) {
if (!isset($groupedIds[$className])) {
$groupedIds[$className] = array();
}
$groupedIds[$className][] = $mongoId;
}
}
foreach ($groupedIds as $className => $ids) {
$class = $this->dm->getClassMetadata($className);
$mongoCollection = $this->dm->getDocumentCollection($className);
$data = $mongoCollection->find(array('_id' => array($cmd . 'in' => $ids)));
foreach ($data as $documentData) {
$document = $this->uow->getById((string) $documentData['_id'], $class->rootDocumentName);
$data = $this->hydratorFactory->hydrate($document, $documentData);
$this->uow->setOriginalDocumentData($document, $data);
}
}
}
示例2: loadReferenceManyCollectionOwningSide
private function loadReferenceManyCollectionOwningSide(PersistentCollection $collection)
{
$hints = $collection->getHints();
$mapping = $collection->getMapping();
$cmd = $this->cmd;
$groupedIds = array();
foreach ($collection->getMongoData() as $key => $reference) {
if (isset($mapping['simple']) && $mapping['simple']) {
$className = $mapping['targetDocument'];
$mongoId = $reference;
} else {
$className = $this->dm->getClassNameFromDiscriminatorValue($mapping, $reference);
$mongoId = $reference[$cmd . 'id'];
}
$id = (string) $mongoId;
if (!$id) {
continue;
}
$reference = $this->dm->getReference($className, $id);
if ($mapping['strategy'] === 'set') {
$collection->set($key, $reference);
} else {
$collection->add($reference);
}
if ($reference instanceof Proxy && !$reference->__isInitialized__) {
if (!isset($groupedIds[$className])) {
$groupedIds[$className] = array();
}
$groupedIds[$className][] = $mongoId;
}
}
foreach ($groupedIds as $className => $ids) {
$class = $this->dm->getClassMetadata($className);
$mongoCollection = $this->dm->getDocumentCollection($className);
$criteria = array_merge(array('_id' => array($cmd . 'in' => $ids)), $this->dm->getFilterCollection()->getFilterCriteria($class), isset($mapping['criteria']) ? $mapping['criteria'] : array());
$cursor = $mongoCollection->find($criteria);
if (isset($mapping['sort'])) {
$cursor->sort($mapping['sort']);
}
if (isset($mapping['limit'])) {
$cursor->limit($mapping['limit']);
}
if (isset($mapping['skip'])) {
$cursor->skip($mapping['skip']);
}
if (isset($hints[Query::HINT_SLAVE_OKAY])) {
$cursor->slaveOkay(true);
}
$documents = $cursor->toArray();
foreach ($documents as $documentData) {
$document = $this->uow->getById((string) $documentData['_id'], $class->rootDocumentName);
$data = $this->hydratorFactory->hydrate($document, $documentData);
$this->uow->setOriginalDocumentData($document, $data);
$document->__isInitialized__ = true;
}
}
}
示例3: loadActualDataForSortedReferenceManyCollectionByIds
/**
* @param PersistentCollection $collection
* @param array $groupedIds
*
* @throws \Doctrine\ODM\MongoDB\MongoDBException
*/
private function loadActualDataForSortedReferenceManyCollectionByIds(PersistentCollection $collection, array $groupedIds)
{
$mapping = $collection->getMapping();
$hints = $collection->getHints();
foreach ($groupedIds as $className => $ids) {
$class = $this->dm->getClassMetadata($className);
$mongoCollection = $this->dm->getDocumentCollection($className);
$criteria = $this->cm->merge(array('_id' => array('$in' => array_values($ids))), $this->dm->getFilterCollection()->getFilterCriteria($class), isset($mapping['criteria']) ? $mapping['criteria'] : array());
$criteria = $this->uow->getDocumentPersister($className)->prepareQueryOrNewObj($criteria);
$cursor = $mongoCollection->find($criteria);
if (isset($mapping['sort'])) {
$cursor->sort($mapping['sort']);
}
if (isset($mapping['limit'])) {
$cursor->limit($mapping['limit']);
}
if (isset($mapping['skip'])) {
$cursor->skip($mapping['skip']);
}
if (!empty($hints[Query::HINT_SLAVE_OKAY])) {
$cursor->slaveOkay(true);
}
if (!empty($hints[Query::HINT_READ_PREFERENCE])) {
$cursor->setReadPreference($hints[Query::HINT_READ_PREFERENCE], $hints[Query::HINT_READ_PREFERENCE_TAGS]);
}
$documents = $cursor->toArray(false);
foreach ($documents as $documentData) {
$docId = $documentData['_id'];
$document = $this->uow->getById($docId, $class);
$data = $this->hydratorFactory->hydrate($document, $documentData);
$this->uow->setOriginalDocumentData($document, $data);
$document->__isInitialized__ = true;
$collection->add($document);
}
}
}
示例4: loadReferenceManyCollectionOwningSide
private function loadReferenceManyCollectionOwningSide(PersistentCollection $collection)
{
$hints = $collection->getHints();
$mapping = $collection->getMapping();
$groupedIds = array();
$sorted = isset($mapping['sort']) && $mapping['sort'];
foreach ($collection->getMongoData() as $key => $reference) {
if (isset($mapping['simple']) && $mapping['simple']) {
$className = $mapping['targetDocument'];
$mongoId = $reference;
} else {
$className = $this->uow->getClassNameForAssociation($mapping, $reference);
$mongoId = $reference['$id'];
}
$id = $this->dm->getClassMetadata($className)->getPHPIdentifierValue($mongoId);
// create a reference to the class and id
$reference = $this->dm->getReference($className, $id);
// no custom sort so add the references right now in the order they are embedded
if (!$sorted) {
if (CollectionHelper::isHash($mapping['strategy'])) {
$collection->set($key, $reference);
} else {
$collection->add($reference);
}
}
// only query for the referenced object if it is not already initialized or the collection is sorted
if ($reference instanceof Proxy && !$reference->__isInitialized__ || $sorted) {
$groupedIds[$className][] = $mongoId;
}
}
foreach ($groupedIds as $className => $ids) {
$class = $this->dm->getClassMetadata($className);
$mongoCollection = $this->dm->getDocumentCollection($className);
$criteria = $this->cm->merge(array('_id' => array('$in' => array_values($ids))), $this->dm->getFilterCollection()->getFilterCriteria($class), isset($mapping['criteria']) ? $mapping['criteria'] : array());
$criteria = $this->uow->getDocumentPersister($className)->prepareQueryOrNewObj($criteria);
$cursor = $mongoCollection->find($criteria);
if (isset($mapping['sort'])) {
$cursor->sort($mapping['sort']);
}
if (isset($mapping['limit'])) {
$cursor->limit($mapping['limit']);
}
if (isset($mapping['skip'])) {
$cursor->skip($mapping['skip']);
}
if (!empty($hints[Query::HINT_SLAVE_OKAY])) {
$cursor->slaveOkay(true);
}
if (!empty($hints[Query::HINT_READ_PREFERENCE])) {
$cursor->setReadPreference($hints[Query::HINT_READ_PREFERENCE], $hints[Query::HINT_READ_PREFERENCE_TAGS]);
}
$documents = $cursor->toArray(false);
foreach ($documents as $documentData) {
$document = $this->uow->getById($documentData['_id'], $class);
$data = $this->hydratorFactory->hydrate($document, $documentData);
$this->uow->setOriginalDocumentData($document, $data);
$document->__isInitialized__ = true;
if ($sorted) {
$collection->add($document);
}
}
}
}
示例5: refresh
/**
* Refreshes a managed document.
*
* @param array $id The identifier of the document.
* @param object $document The document to refresh.
*/
public function refresh($id, $document)
{
$data = $this->collection->findOne(array('_id' => $id));
$this->dm->getHydrator()->hydrate($document, $data);
$this->uow->setOriginalDocumentData($document, $data);
}