Beispiel #1
0
 /**
  * Save entity into DB
  *
  * @param BaseEntity $baseEntity
  * @return BaseEntity
  * @throws \Exception
  */
 protected function saveEntity(BaseEntity $baseEntity)
 {
     $isPersisted = UnitOfWork::STATE_MANAGED === $this->entityManager->getUnitOfWork()->getEntityState($baseEntity);
     if ($isPersisted) {
         $this->entityManager->merge($baseEntity);
     } else {
         $this->entityManager->persist($baseEntity);
     }
     $this->entityManager->flush();
     return $baseEntity;
 }
 private function doInsert($entity)
 {
     // get entity metadata
     $meta = $this->em->getClassMetadata(get_class($entity));
     // fields that have to be inserted
     $fields = $this->getUniqueAndRequiredFields($meta, $entity);
     // associations that have to be inserted
     $associations = $this->getUniqueAndRequiredAssociations($meta, $entity);
     // discriminator column
     $discriminator = $this->getDiscriminatorColumn($meta);
     // prepare statement && execute
     $this->prepareInsert($meta, array_merge($fields, $associations, $discriminator))->execute();
     // assign ID to entity
     if ($idGen = $meta->idGenerator) {
         if ($idGen->isPostInsertGenerator()) {
             $id = $idGen->generate($this->em, $entity);
             $identifierFields = $meta->getIdentifierFieldNames();
             $meta->setFieldValue($entity, reset($identifierFields), $id);
         }
     }
     // entity is now safely inserted to database, merge now
     $merged = $this->em->merge($entity);
     $this->em->flush(array($merged));
     // when you merge entity, you get a new reference
     return $merged;
 }