Bonjour à tous,

Pourriez vous m'aider svp?

J'ai un script avec une entité et des critères, j'ai dû ajouter la gestion de plusieurs commentaires pour un critère et une entité. Le soucis c'est que c'est un grouffre à peformance. Comment je peux optimiser d'après vous?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 public function createOrUpdateCriteriaIfEntityUpdated(
        HasCriterionInterface $ownerEntity,
        array $criteria,
        DateTime $dateImportStarted
 
    ) {
        if (!$ownerEntity->getIsUpdated()) {
            return false;
        }
 
        foreach ($criteria as $criterion) {
                $criterionValue = $this->criterionValueRepository->createOrUpdate($criterion, $dateImportStarted);
                $ownerEntity->addCriterionValue($criterionValue);
        }
        $this->em->persist($ownerEntity);
 
        return true;
    }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
 
    public function createOrUpdate(
        Criterion $criterion,
        DateTime $dateImport
    ): CriterionValue {
 
 
        $comment = $criterion->getComment();
        $criterionDatabase = $this->getEntityManager()->getRepository(Criterion::class)
        ->findOneBy(['keyCriterion' => $criterion->getKeyCriterion()]);
 
        if(!$criterionDatabase) {
            $criterion->setUpdatedAt($dateImport);
            $criterionValue = $this->createCriterionValue($comment, $dateImport);
            $criterionValue->setCriterion($criterion);
 
            $this->getEntityManager()->persist($criterion);
            $this->getEntityManager()->persist($criterionValue);
            $this->getEntityManager()->flush();     
 
            return $criterionValue;
        } 
 
        $criterionDatabase->setLabelCriterion($criterion->getLabelCriterion());
        $criterionDatabase->setUpdatedAt($dateImport);
 
        $criterionValues = $criterionDatabase->getCriterionValues();
 
        $criterionValueMatch = null;
        foreach($criterionValues as $criterionValue) {
            if($comment === $criterionValue->getLabelCriterionValue()) {
                $criterionValueMatch = $criterionValue;
                break;
            }
        }
 
        if(!$criterionValueMatch){
            $criterionValue = $this->createCriterionValue($comment, $dateImport);
            $criterionValue->setCriterion($criterionDatabase);
            $this->getEntityManager()->persist($criterionValue);
            return $criterionValue;
        }
 
        return $criterionValueMatch;
    }
 
    private function createCriterionValue(
        string $comment,
        Datetime $dateImport
    ) : CriterionValue {
        return (new CriterionValue())->setLabelCriterionValue($comment)->setUpdatedAt($dateImport);
    }
Merci