Bonjour,

J'ai un formulaire de recherche basé sur des critères complétés par l'utilisateur. Dans ces critères, il y en a qui correspondent à des équipements qui peuvent être de deux sortes : ceux liés à la cellule et ceux liés au porteur.

Lors du chargement du formulaire, voici l'erreur que j'obtiens :

Entity of type "App\Entity\Equipment" passed to the choice field must be managed. Maybe you forget to persist it in the entity manager?
Pour effectuer la recherche, j'ai créé une entité "AdvertSearch.php" qui est hydratée par le formulaire de recherche.

Voici le code correspondant aux champs liés à l'équipement dans mon formulaire :

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
 
...
        $builder 
...
            ->add('cellEquipments', EntityType::class, ['required' => false,
                                                        'label' => false,
                                                        'class' => 'App\Entity\Equipment',
                                                        'choice_label' => 'equipment',
                                                        'multiple' => true, 
                                                        'query_builder' => function(EquipmentRepository $er) use ($belongingCell) {
                                                                                return $er->queryFindByBelonging($belongingCell);
                                                                           }
                                                       ]
                 )
            ->add('carrierEquipments', EntityType::class, ['required' => false,
                                                           'label' => false,
                                                           'class' => 'App\Entity\Equipment',
                                                           'choice_label' => 'equipment',
                                                           'multiple' => true,
                                                           'query_builder' => function(EquipmentRepository $er) use ($belongingCarrier) {
                                                                                   return $er->queryFindByBelonging($belongingCarrier);
                                                                              }
                                                          ]
                 )
...
Dans mon entité 'AdvertSearch.php", voici les propriétés , setters et getters liés :

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
53
54
55
56
57
58
59
60
 
...
    /**
     * @var ArrayCollection
     */
    private $cellEquipments;
 
    /**
     * @var ArrayCollection
     */
    private $carrierEquipments;
...
    public function __construct()
    {
 
        $this->cellEquipments = new ArrayCollection();
        $this->carrierEquipments = new ArrayCollection();
 
    }
...
    /**
     * @param ArrayCollection $cellEquipments
     */
    public function setCellEquipments(ArrayCollection $cellEquipments): void
    {
 
        $this->cellEquipments = $cellEquipments;
 
    }
 
    /**
     * @return ArrayCollection 
     */
    public function getCellEquipments(): ArrayCollection
    {
 
        return $this->cellEquipments;
 
    }
 
    /**
     * @param ArrayCollection $carrierEquipments
     */
    public function setCarrierEquipments(ArrayCollection $carrierEquipments): void
    {
 
        $this->carrierEquipments = $carrierEquipments;
 
    }
 
    /**
     * @return ArrayCollection 
     */
    public function getCarrierEquipments(): ArrayCollection
    {
 
        return $this->carrierEquipments;
 
    }
...
Voici le code correspondant à la tenue en compte de ces critères dans ma fonction de recherche dans le repository :

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
 
...
        $cellEquipments = $search->getCellEquipments();
 
        if ($cellEquipments->count() > 0)
        {
 
            $k = 0;
 
            foreach ($cellEquipments as $k => $cellEquipment) 
            {
 
                $k++;
 
                $query = $query->andWhere(":cellEquipment$k MEMBER OF v.cellEquipments")
                               ->setParameter("cellEquipment$k", $cellEquipment)
                ;
 
            }
 
        }
 
        $carrierEquipments = $search->getCarrierEquipments();
 
        if ($carrierEquipments->count() > 0)
        {
 
            $l = 0;
 
            foreach ($carrierEquipments as $l => $carrierEquipment) 
            {
 
                $l++;
 
                $query = $query->andWhere(":carrierEquipment$l MEMBER OF v.carrierEquipments")
                               ->setParameter("carrierEquipment$l", $carrierEquipment)
                ;
 
            }
 
        }
...
Quelqu'un aurait une idée sur la manière de résoudre ce problème?

Merci d'avance pour votre aide.