/** * 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; }