* @internal use App\Configuration\ConfigurationService instead * @final */ class ConfigurationRepository extends EntityRepository { public function saveConfiguration(Configuration $configuration): void { $entityManager = $this->getEntityManager(); $entityManager->persist($configuration); $entityManager->flush(); } /** * @return array */ public function getConfigurations(): array { $query = $this->createQueryBuilder('s')->select('s.name')->addSelect('s.value')->getQuery(); /** @var array> $result */ $result = $query->getArrayResult(); $all = []; foreach ($result as $row) { $all[$row['name']] = $row['value']; } return $all; } public function saveSystemConfiguration(SystemConfiguration $model): void { $em = $this->getEntityManager(); $em->beginTransaction(); try { foreach ($model->getConfiguration() as $configuration) { $entity = $this->findOneBy(['name' => $configuration->getName()]); $value = $configuration->getValue(); if (null === $value && null !== $entity) { $em->remove($entity); continue; } if (null === $entity) { $entity = new Configuration(); $entity->setName($configuration->getName()); } // allow to use entity types if (\is_object($value) && method_exists($value, 'getId')) { $value = $value->getId(); } $entity->setValue($value); $em->persist($entity); } $em->flush(); $em->commit(); } catch (ORMException $ex) { $em->rollback(); throw $ex; } } }