← Back
Editing: AgencyImportMapper.php
<?php namespace App\Import; use App\Entity\AgencyPrestataire; use App\Service\SolutionService; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\NonUniqueResultException; use Doctrine\ORM\NoResultException; class AgencyImportMapper { public function __construct( private readonly EntityManagerInterface $entityManager, private readonly SolutionService $solutionService ) { } /** * @param class-string $modelClass */ public function __invoke(string $modelClass, array $values): object { $uniqueKeys = ExcelMapping::UNIQUE[$modelClass]; $params = []; $this->transformValues($modelClass, $values); try { $qb = $this->entityManager->getRepository($modelClass) ->createQueryBuilder('obj'); foreach ($uniqueKeys as $uniqueKey) { if ('NULL' === gettype($values[$uniqueKey])) { $qb->andWhere('obj.'.$uniqueKey.' IS NULL'); } else { $operand = $this->getOperand($values[$uniqueKey]); $qb->andWhere('obj.'.$uniqueKey.' '.$operand.' :'.$uniqueKey); $params[$uniqueKey] = trim($values[$uniqueKey]); } } /* Handle solution */ if (method_exists(new $modelClass(), 'getSolution')) { $params['solution'] = $this->solutionService->getCurrent(); $qb->andWhere('obj.solution = :solution'); } $qb->setParameters($params); return $qb->getQuery()->getSingleResult(); } catch (NoResultException|NonUniqueResultException $e) { return new $modelClass(); } } private function transformValues(string $modelClass, array &$values): void { match ($modelClass) { AgencyPrestataire::class => $this->transformAgencyProviderValues($values), default => '' }; } private function getOperand($var): string { switch (gettype($var)) { case 'NULL': $operand = 'IS'; break; case 'string': $operand = 'LIKE'; break; default: $operand = '='; break; } return $operand; } private function transformAgencyProviderValues(array &$values): void { $emailContact = $values['mailContact']; $emailContacts = explode(';', $emailContact); $values['mailContact'] = $emailContacts[0]; } }
Save File
Cancel