Example #1
0
 /**
  * @param ClassMetadata $class
  * @param array         $entityData
  * @param string        $revType
  * @param boolean       $draft
  */
 private function saveRevisionEntityData($class, $entityData, $revType)
 {
     $version = $this->getRevisionId();
     $params = array($version ? $version : 1, $revType);
     $types = array(Type::INTEGER, Type::STRING);
     $fields = array();
     foreach ($class->associationMappings as $field => $assoc) {
         if ($class->isInheritanceTypeJoined() && $class->isInheritedAssociation($field)) {
             continue;
         }
         if (!(($assoc['type'] & ClassMetadata::TO_ONE) > 0 && $assoc['isOwningSide'])) {
             continue;
         }
         if (!$this->annotationReader->isPropertyRevised($class->name, $field)) {
             continue;
         }
         $data = isset($entityData[$field]) ? $entityData[$field] : null;
         $relatedId = false;
         if ($data !== null && $this->uow->isInIdentityMap($data)) {
             $relatedId = $this->uow->getEntityIdentifier($data);
         }
         $targetClass = $this->em->getClassMetadata($assoc['targetEntity']);
         foreach ($assoc['sourceToTargetKeyColumns'] as $sourceColumn => $targetColumn) {
             $fields[$sourceColumn] = true;
             if ($data === null) {
                 $params[] = null;
                 $types[] = \PDO::PARAM_STR;
             } else {
                 $params[] = $relatedId ? $relatedId[$targetClass->fieldNames[$targetColumn]] : null;
                 $types[] = $targetClass->getTypeOfColumn($targetColumn);
             }
         }
     }
     foreach ($class->fieldNames as $field) {
         if (array_key_exists($field, $fields)) {
             continue;
         }
         if ($class->isInheritanceTypeJoined() && $class->isInheritedField($field) && !$class->isIdentifier($field)) {
             continue;
         }
         if (!$this->annotationReader->isPropertyRevised($class->name, $field) && !$class->isIdentifier($field)) {
             continue;
         }
         $params[] = isset($entityData[$field]) ? $entityData[$field] : null;
         $types[] = $class->fieldMappings[$field]['type'];
     }
     if ($class->isInheritanceTypeJoined() && $class->name == $class->rootEntityName) {
         $params[] = $entityData[$class->discriminatorColumn['name']];
         $types[] = $class->discriminatorColumn['type'];
     }
     if ($class->isInheritanceTypeJoined() && $class->name != $class->rootEntityName) {
         $entityData[$class->discriminatorColumn['name']] = $class->discriminatorValue;
         $this->saveRevisionEntityData($this->em->getClassMetadata($class->rootEntityName), $entityData, $revType);
     }
     $this->conn->executeUpdate($this->getRevisionSQL($class), $params, $types);
 }
Example #2
0
 /**
  * @param ClassMetadataInfo $cm
  * @param string            $columnName
  * @return bool
  */
 protected function isColumnRevised(ClassMetadataInfo $cm, $columnName)
 {
     try {
         $propertyName = $cm->getFieldForColumn($columnName);
         return $this->annotationReader->isPropertyRevised($cm->name, $propertyName);
     } catch (MappingException $e) {
         if ($cm->isInheritanceTypeSingleTable()) {
             foreach ($cm->subClasses as $subClass) {
                 $subClassMeta = $this->getClassMetaData($subClass);
                 try {
                     $propertyName = $subClassMeta->getFieldForColumn($columnName);
                     return $this->annotationReader->isPropertyRevised($subClassMeta->name, $propertyName);
                 } catch (MappingException $e) {
                 }
             }
         }
     }
     return false;
 }