예제 #1
0
 /**
  * @param EventArgs $eventArgs
  * @return void
  */
 public function loadClassMetadata(EventArgs $eventArgs)
 {
     $meta = $eventArgs->getClassMetadata();
     $ea = $this->getEventAdapter($eventArgs);
     if (is_subclass_of($meta->getName(), $ea->getHierarchyClassName(), true)) {
         $ea->mapHierarchy($meta);
     }
     parent::loadClassMetadata($eventArgs);
 }
 /**
  * Registered the postLoad calls for wanted classes
  *
  * @param EventArgs $event
  * @access public
  * @return void
  */
 public function loadClassMetadata(EventArgs $event)
 {
     if ($event instanceof LoadClassMetadataEventArgs) {
         $className = $event->getClassMetadata()->getName();
         $this->loadExternalAssociationByClassName($className);
     } elseif (method_exists($event, 'getObjectManager')) {
         $this->loadExternalAssociationByManager($event->getObjectManager());
     } else {
         $msg = '$event must implements `Doctrine\\Common\\Persistence\\Event\\LoadClassMetadataEventArgs` ' . ' or have a `getObjectManager` method.';
         throw new \InvalidArgumentException($msg);
     }
 }
 /**
  * @param EventArgs $eventArgs
  */
 public function loadClassMetadata(EventArgs $eventArgs)
 {
     $meta = $eventArgs->getClassMetadata();
     if (!$meta->isRootEntity() || $meta->isInheritanceTypeNone() || $meta->subClasses || $meta->isMappedSuperclass) {
         return;
     }
     $ea = $this->getEventAdapter($eventArgs);
     $om = $ea->getObjectManager();
     $name = $meta->getName();
     $meta->subClasses = $this->getSubClasses($name, $om);
     $this->loadMetadataForObjectClass($om, $meta);
 }
예제 #4
0
 /**
  * @param EventArgs $eventArgs
  */
 public function loadClassMetadata(EventArgs $eventArgs)
 {
     /* @var $classMetadata ClassMetadata */
     $classMetadata = $eventArgs->getClassMetadata();
     // If the entity is a subclass with STI, it gets its already prefixed table from inherited class
     if (!$classMetadata->isInheritanceTypeSingleTable() || $classMetadata->getName() === $classMetadata->rootEntityName) {
         $classMetadata->setTableName($this->prefix . $classMetadata->getTableName());
     }
     foreach ($classMetadata->getAssociationMappings() as $fieldName => $mapping) {
         if ($mapping['type'] === ClassMetadataInfo::MANY_TO_MANY && !$classMetadata->isInheritedAssociation($fieldName) && isset($classMetadata->associationMappings[$fieldName]['joinTable']['name'])) {
             $mappedTableName = $classMetadata->associationMappings[$fieldName]['joinTable']['name'];
             $classMetadata->associationMappings[$fieldName]['joinTable']['name'] = $this->prefix . $mappedTableName;
         }
     }
 }
예제 #5
0
 /**
  * @param EventArgs $eventArgs
  */
 public function loadClassMetadata(EventArgs $eventArgs)
 {
     $metadata = $eventArgs->getClassMetadata();
     if ($metadata->isMappedSuperclass) {
         return;
     }
     $mappings = $metadata->getAssociationMappings();
     $name = $metadata->getName();
     if (!isset($mappings['metadata']) && in_array($this->targetEntity, class_implements($name))) {
         $reflClass = $metadata->getReflectionClass();
         $namespace = $reflClass->getNamespaceName();
         $classShortName = $reflClass->getShortName();
         $metadata->mapOneToMany(['targetEntity' => "{$namespace}\\{$classShortName}Metadata", 'fieldName' => 'metadata', 'mappedBy' => 'object', 'orphanRemoval' => true, 'cascade' => ['persist', 'remove'], 'fetch' => 'EXTRA_LAZY']);
     } elseif (!isset($mappings['object']) && is_subclass_of($name, $this->sourceEntity)) {
         $namingStrategy = $eventArgs->getEntityManager()->getConfiguration()->getNamingStrategy();
         $metadata->mapManyToOne(['targetEntity' => str_replace('Metadata', '', $name), 'fieldName' => 'object', 'inversedBy' => 'metadata', 'joinColumn' => ['name' => 'object_id', 'referencedColumnName' => $namingStrategy->referenceColumnName(), 'onDelete' => 'CASCADE', 'onUpdate' => 'CASCADE']]);
     }
 }
 /**
  * @param EventArgs $eventArgs
  */
 public function loadClassMetadata(EventArgs $eventArgs)
 {
     $meta = $eventArgs->getClassMetadata();
     if ($meta->isInheritanceTypeNone()) {
         return;
     }
     $className = $meta->getName();
     if (!empty($this->discriminatorMaps[$className])) {
         foreach ($this->discriminatorMaps[$className] as $entry => $className) {
             if (in_array($className, $meta->discriminatorMap)) {
                 $meta->discriminatorMap = array_diff($meta->discriminatorMap, [$className]);
             }
             $meta->discriminatorMap[$entry] = $className;
             if (!in_array($className, $meta->subClasses) && $className !== $meta->name) {
                 $meta->subClasses[] = $className;
             }
         }
     }
 }