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);
}
}
}