Doctrine\ODM\MongoDB\UnitOfWork::getClassNameForAssociation PHP Method

getClassNameForAssociation() public method

Gets the class name for an association (embed or reference) with respect to any discriminator value.
public getClassNameForAssociation ( array $mapping, array | null $data ) : string
$mapping array Field mapping for the association
$data array | null Data for the embedded document or reference
return string Class name.
    public function getClassNameForAssociation(array $mapping, $data)
    {
        $discriminatorField = isset($mapping['discriminatorField']) ? $mapping['discriminatorField'] : null;
        $discriminatorValue = null;
        if (isset($discriminatorField, $data[$discriminatorField])) {
            $discriminatorValue = $data[$discriminatorField];
        } elseif (isset($mapping['defaultDiscriminatorValue'])) {
            $discriminatorValue = $mapping['defaultDiscriminatorValue'];
        }
        if ($discriminatorValue !== null) {
            return isset($mapping['discriminatorMap'][$discriminatorValue]) ? $mapping['discriminatorMap'][$discriminatorValue] : $discriminatorValue;
        }
        $class = $this->dm->getClassMetadata($mapping['targetDocument']);
        if (isset($class->discriminatorField, $data[$class->discriminatorField])) {
            $discriminatorValue = $data[$class->discriminatorField];
        } elseif ($class->defaultDiscriminatorValue !== null) {
            $discriminatorValue = $class->defaultDiscriminatorValue;
        }
        if ($discriminatorValue !== null) {
            return isset($class->discriminatorMap[$discriminatorValue]) ? $class->discriminatorMap[$discriminatorValue] : $discriminatorValue;
        }
        return $mapping['targetDocument'];
    }

Usage Example

 private function loadReferenceManyCollectionOwningSide(PersistentCollection $collection)
 {
     $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);
         $reference = $this->dm->getReference($className, $id);
         /* If the reference has custom sort, remember IDs to execute the query later.
          * Otherwise add the references right now in the order they are embedded.
          */
         if ($sorted) {
             $groupedIds[$className][] = $mongoId;
         } else {
             if ($mapping['strategy'] === 'set') {
                 $collection->set($key, $reference);
             } else {
                 $collection->add($reference);
             }
         }
     }
     if ($sorted && count($groupedIds)) {
         $this->loadActualDataForSortedReferenceManyCollectionByIds($collection, $groupedIds);
     }
 }
All Usage Examples Of Doctrine\ODM\MongoDB\UnitOfWork::getClassNameForAssociation
UnitOfWork